如何在命令行中创建一个启动具有管理员权限的应用程序的快捷方式?

10

我有一个安装程序(Inno-Setup),它将我的应用程序安装到用户定义的路径。在安装程序结束时,我想创建一个快捷方式,以管理员特权启动应用程序。这个解决方案应该适用于从winXP到Win7的所有Windows版本。

我该怎么做才能实现这个目标?

我知道可以使用批处理脚本(执行一个不好的VB脚本)来实现。缺点是会弹出cmd窗口,而且我猜它只适用于win7。

我还尝试使用命令mklink创建超链接,但由于无法传递设置管理员权限的参数,因此它不起作用。


@TLama runas /user:admin 在命令行上提示输入密码并不是用户应该得到的选项,应该弹出对话框提示。 - Chriss
@Deanna 我想创建一个快捷方式,让用户稍后可以运行以启动应用程序。 - Chriss
1
@Chriss 那么请看下面我的回答 - Deanna
2
@Chriss 请检查您的术语。超链接是完全不同的概念。符号链接(通过 mklink)又有所不同。您正在询问快捷方式(一个 .lnk 文件)。 - Deanna
感谢您的澄清,我已经更改了术语。 - Chriss
显示剩余2条评论
4个回答

12
您可以添加一个注册表键,告诉Windows以管理员身份执行您的程序:
在“HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers”下,只需添加一个键(REG_SZ)

但是如何使用批处理文件来实现呢?你能提供一个示例吗? - Chriss
很好,也很容易!我在Win7上测试了一下,它能够正常运行。我会将其添加到安装脚本的末尾,然后就完成了!现在每次用户启动应用程序时,都会出现权限对话框。 - Chriss
1
因为这是一种兼容性的hack,而不是为新应用程序设计的,所以被downvote了。密钥本身没有完全记录,并且可以完全关闭。正确的方法是通过Vista+的清单和pre Vista上的runas来完成。 - Deanna
这也会影响使用相同可执行文件的任何其他内容。例如,java.exe将导致尝试以管理员身份运行所有Java应用程序。 - Deanna
无法在 Windows 10 上运行。 - Kostas Markakis

1
"以管理员身份运行"是可执行文件的属性,而不是快捷方式的属性。您应该添加所需清单,这会提示 Windows 进行提升操作。
在 Windows XP 上,您需要使用 ShellExecute() 中的 runas 动词以其他用户身份运行,但这将删除访问本地配置文件的任何能力。当您的 exe 发现它没有完全的管理员访问权限时,可以从中执行此操作。"

问题在于我无法更改或重新编译exe文件,它是一个Java应用程序。我还尝试了“runas /user:admin”命令,但它没有显示对话框提示而是一个命令行密码提示。 - Chriss
是的,XP没有UAC或提升的概念。如果用户没有管理员访问权限,您唯一的选择是作为另一个具有管理员权限的用户运行。 - Deanna
ShellExecute() 是一个 Win32 API 函数,您可以从应用程序中调用它。其中一个参数是 verb,您需要将其传递为 runas。网上有很多示例,但确切的使用取决于您的代码所使用的语言。 - Deanna
4
在 GUI 中的 "高级" 选项下,快捷方式有一个 "以管理员身份运行" 的属性。我想应该可以从 Powershell 或 VBScript 创建设置了此属性的快捷方式,虽然我原本认为 Inno Setup 应该具有操作快捷方式的内置机制。 - Harry Johnston
1
@Deanna:不,它确实会更改快捷方式。我刚在网络驱动器上创建了两个cmd.exe的快捷方式,并在其中一个上设置了“以管理员身份运行”的标志。这个更改按预期在一个快捷方式上起作用,但没有影响另一个快捷方式。此外,从另一台计算机打开带有标记的快捷方式会导致提升,因此该标志不能存储在注册表中。(Windows 7.) - Harry Johnston
显示剩余2条评论

0

可以完成shortcutjs.bat

shortcutjs.bat -linkfile tst6.lnk -target "%cd%\myscript.bat" -adminpermissions yes

-adminpermissions yes 是用于如果您想以管理员身份运行批处理文件。您需要输入脚本的完整路径。

"以管理员身份运行" 的选项会在 .lnk 文件中设置一个二进制标志(第21个字符),脚本也是通过读取该文件的二进制流并更改该值来实现此功能。


0
创建快捷方式后,将其第21个字节(位置0x15)更改为32(0x20),以使其“以管理员身份运行”。 将其改回0会使其成为“普通”(非管理员)快捷方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接