我有一个安装程序(Inno-Setup),它将我的应用程序安装到用户定义的路径。在安装例程结束时,我想创建一个以管理员权限启动应用程序的快捷方式。该解决方案适用于从 winXP 到 Win7 的所有 win 版本。
我能做些什么来实现这一目标?
我知道可以使用批处理脚本来执行讨厌的 vb-script。缺点是 cmd-window 弹出窗口,我猜它只适用于 win7。
我还尝试了mklink
创建超链接的命令,但它不起作用,因为无法传递设置管理员权限的参数。
4 回答
您可以添加一个注册表项,告诉 Windows 以管理员身份执行您的程序:
在 下,只需添加一个值为HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
的键(REG_SZ)。启动 exe 时,系统会提示您进行管理员访问。<Path to your exe>
RUNASADMIN
有了它,您可以像使用 Inno-Setup 一样简单地创建可执行文件的普通快捷方式。
如果要通过 cmd 或批处理文件执行此操作,可以使用以下命令:
reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "<Path to your exe>" /t REG_SZ /d RUNASADMIN
“以管理员身份运行”是可执行文件的属性,而不是快捷方式。您应该添加使 Windows 提示提升所需的清单。
要在 Windows XP 上执行此操作,您需要使用runas
动词 withShellExecute()
以作为不同的用户运行,但这将删除任何访问本地配置文件的能力。当它发现它没有以完全管理员访问权限运行时,可以从您的 exe 中完成此操作。
创建快捷方式后,将其第 21 个字节(位置 0x15)更改为 32(0x20),使其“以管理员身份运行”。将其更改回 0 使其成为“正常”(非管理员)快捷方式。
可以做到shortcutjs.bat
:
shortcutjs.bat -linkfile tst6.lnk -target "%cd%\myscript.bat" -adminpermissions yes
-adminpermissions yes
如果您想以管理员身份运行 bat。您需要脚本的完整路径。
“以管理员身份运行”勾选在.lnk
文件中设置了一个二进制标志(第 21 个字符),这也是脚本正在执行的操作 - 将其读取为二进制流并更改该值。