Inno Setup桌面快捷方式(链接),具有“以管理员身份运行”高级属性集

时间:2017-05-19 15:30:39

标签: inno-setup desktop-shortcut windows-shortcut

我正在努力让Inno设置(5.5.9u)创建一个桌面快捷方式,该快捷方式具有图标并具有“以管理员身份运行”设置的高级属性。

问题

这个问题与How to set 'Run as administrator' on a file using Inno Setup

略有不同

因为我要做的是在设置时没有使用管理员权限运行程序(设置已经在管理员运行),而是在桌面上留下了高级 “以管理员身份运行”的属性

代码示例

[Icons]
Name: "{group}\EGPL Watson Uninstall"; Filename: "{uninstallexe}"; WorkingDir: "{app}"
Name: "{commondesktop}\DashBoard"; \
    Filename: "{app}\dashboard\node_modules\electron\dist\electron.exe main.js"; \
    WorkingDir: "{app}\dashboard"; IconFilename: "{src}\dashboard\build\configure.ico"

1 个答案:

答案 0 :(得分:1)

首先,确保您有充分的理由以管理员权限运行您的应用程序。用户应用程序不需要管理员权限。如果他们需要它,通常表明设计不好。希望应用程序以管理员权限运行的一个常见(坏)原因是应用程序需要写入其安装文件夹。

请参阅Application does not work when installed with Inno Setup

Inno Setup本身不支持使用“以管理员身份运行”标志设置创建快捷方式。

“以管理员身份运行”标志有点像.lnk文件。参见:

您可以使用以下代码设置该位:

[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
  AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')

[Code]

procedure SetElevationBit(Filename: string);
var
  Buffer: string;
  Stream: TStream;
begin
  Filename := ExpandConstant(Filename);
  Log('Setting elevation bit for ' + Filename);

  Stream := TFileStream.Create(FileName, fmOpenReadWrite);
  try
    Stream.Seek(21, soFromBeginning);
    SetLength(Buffer, 1);
    Stream.ReadBuffer(Buffer, 1);
    Buffer[1] := Chr(Ord(Buffer[1]) or $20);
    Stream.Seek(-1, soFromCurrent);
    Stream.WriteBuffer(Buffer, 1);
  finally
    Stream.Free;
  end;
end;

在Inno Setup的Unicode版本上测试过。但是,它应该更自然地适用于Ansi版本。