inno-setup - 具有 "Run as administrator"高级属性集的 Inno Setup 桌面快捷方式(链接)

标签 inno-setup shortcut-file windows-shortcut

我正在努力让 Inno setup (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"

最佳答案

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

参见 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 版本(Inno Setup 6 的唯一版本)上进行了测试。但更自然地,它也应该适用于 Ansi 版本。

关于inno-setup - 具有 "Run as administrator"高级属性集的 Inno Setup 桌面快捷方式(链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073886/

相关文章:

python - 如何自动化使用 pyinstaller 和 innosetup 创建的 Django-App_EXE

windows - ExpandConstant 函数似乎不适用于 Windows 7

inno-setup - 当未在 InputFilePage (CreateInputFilePage) 上选择文件时如何禁用 NextButton?

deployment - 将桌面快捷方式部署到运行 Windows CE 4.2 (VS2005) 的设备

java - 为什么读取目录时无法访问windows快捷方式

Linux shell 脚本没有完全作为桌面快捷方式执行

permissions - Inno Setup 在所有用户的所有桌面上创建单独的快捷方式

windows - inno setup创建的vb脚本快捷方式出错