我正在努力让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"
答案 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版本。