如何使用UAC提升Perl进程权限

4
假设我有一个脚本需要读取普通用户无权读取的信息(例如其他用户的文件夹)。
目前我只能抱怨不能以“超级用户”身份运行并退出,但我更希望脚本自己请求提权。

最简单的解决方案可能是为您的脚本创建一个快捷方式,并将快捷方式设置为以管理员身份运行进程。 - ikegami
@ikegami 我相信这相当于右键单击并选择“以管理员身份运行”。不幸的是,对于Perl脚本以及它们的快捷方式,此菜单选项是缺失的,相关复选框也被禁用 - Alois Mahdal
只需要指定 perl.exe 作为要运行的程序即可。将您的脚本作为参数传递即可。(已测试) - ikegami
不,不要使用关联。就像你说的那样,那行不通。你需要提供一个可执行文件来使用RunAs。 - ikegami
@ikegami 哦,现在我明白了。这很好用!我想你应该把它发布为答案。(虽然这实际上是一个解决方法,因为脚本并没有像我最初指定的那样自己请求权限,而我仍然非常好奇:)) - Alois Mahdal
显示剩余3条评论
3个回答

3
根据 MSDNPerlMonks,你可以尝试:
Win32::FileOp::ShellExecute( runas => 'yourprogram.exe' )

或者

Win32::FileOp::ShellExecute( runasuser => 'yourprogram.exe' )

这些功能应该(未经测试)在需要时要求您提升权限。 (仅适用于Windows 7)。
相关链接:运行时请求管理员特权

2
如果您愿意通过快捷方式启动,可以使用以下方法:
1.创建perl.exe的快捷方式。 2.编辑快捷方式。 a. 在“快捷方式”选项卡上,将“目标”更改为“c:...\bin\perl.exe”“c:...\script.pl”。 b. [可选]在“快捷方式”选项卡上,将“起始位置”更改为脚本所在目录的路径。 c. 在“快捷方式”选项卡上,单击“高级”,然后选中“以管理员身份运行”。
有一个名为“runas”的工具,但是我似乎无法在不要求管理员密码的情况下使其正常工作。

2

在我的工作中,经常会遇到这个问题而无法得到一个好的答案,因此我编写了Win32::RunAsAdmin。它仅仅是通过OLE调用Windows Shell并使用“runas”作为动词,但它方便地打包,所以你只需要将以下内容放在代码开头:

use Win32::RunAsAdmin qw(force);

在导入步骤中,它会检查是否具有提升的特权,并在您已经以提升模式运行时返回静默。否则,它将在 UAC 弹出窗口下以提升模式重新启动脚本。

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