我正在努力让 Inno setup (5.5.9u) 创建一个带有图标并具有高级属性的桌面快捷方式“以管理员身份运行” set.
Issue
这个问题与以下问题有点不同:如何使用 Inno Setup 在文件上设置“以管理员身份运行”
因为我想做的不是在安装时以管理员权限运行程序(安装程序已经在管理员中运行),而是在桌面上留下一个链接,其中包含advanced的财产“以管理员身份运行”.
代码示例
[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"
首先,确保您有充分的理由以管理员权限运行应用程序。用户应用程序不应需要管理员权限。如果他们需要它,通常表明设计不好。希望应用程序以管理员权限运行的一个常见(坏)原因是应用程序需要写入其安装文件夹。
See 使用 Inno Setup 安装时应用程序无法运行
Inno Setup 本身不支持创建快捷方式“以管理员身份运行”标志设置。
The “以管理员身份运行”flag 有点像.lnk 文件。看:
-
链接标志在 [MS-SHLLINK] 中:Shell 链接 (.LNK) 二进制文件格式;
- 如何使用 Powershell 创建以管理员身份运行快捷方式
- 如何使用 JScript 创建使用“以管理员身份运行”的快捷方式
您可以使用以下代码设置该位:
[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 版本(Inno Setup 6 的唯一版本)上进行了测试。但更自然地,它也应该适用于 Ansi 版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)