【问题标题】:How to create a shortcut to launch an App with admin privileges from the cmd-line?如何创建快捷方式以从命令行启动具有管理员权限的应用程序?
【发布时间】:2013-04-18 12:37:56
【问题描述】:

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

我能做些什么来实现这一目标?

我知道是possible with a batch script, that executes a nasty vb-script。缺点是 cmd-window 弹出窗口,我猜它只适用于 win7。

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

【问题讨论】:

  • 在命令行前添加runas
  • 您想在哪里创建超链接? Inno 使用标准 Win32 控件,其本机方法是按钮或最后一页上的复选框。或者你想创建一个用户可以稍后运行的快捷方式?
  • @TLama runas /user:admin 在 cmd-line 上提示密码,这不是用户应该获得对话框提示的选项
  • @Chriss 那么请看下面的my answer
  • @Chriss 还要检查您的术语。超链接是一个完全不同的概念。符号链接(通过mklink)再次不同。您在询问快捷方式(.lnk 文件)。

标签: windows batch-file hyperlink cmd inno-setup


【解决方案1】:

您可以添加一个注册表项,告诉 Windows 以管理员身份执行您的程序:

HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers 下,只需添加一个值为RUNASADMIN 的键(REG_SZ) <Path to your exe>。启动 exe 时,系统会提示您进行管理员访问。

有了它,您可以像使用 Inno-Setup 一样简单地为您的可执行文件创建一个普通的快捷方式。

如果您想通过 cmd 或批处理文件执行此操作,可以使用以下命令:

reg add "HKCU\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "<Path to your exe>" /t REG_SZ /d RUNASADMIN

【讨论】:

  • 但是如何使用批处理文件来做到这一点?可以提供样品吗?
  • 简单又好用!它把它绑在Win7上,它可以工作。我会将其添加到安装程序脚本的末尾并完成!每次用户现在启动应用程序时,都会显示权限对话框。
  • 投反对票,因为它是一种兼容性黑客,不是为新应用程序设计的。密钥本身没有完整记录,可以是turned off entirely。正确的方法是通过 Vista+ 和 runas 在 pre Vista 上的清单。
  • 这也会影响使用相同可执行文件的任何其他内容。例如java.exe 将导致它尝试以管理员身份运行所有 Java 应用程序。
【解决方案2】:

“以管理员身份运行”是可执行文件的属性,而不是快捷方式。您应该添加required manifest,使 Windows 提示提升。

要在 Windows XP 上执行此操作,您需要使用 runas 动词和 ShellExecute() 来以不同的用户身份运行,但这将删除任何访问本地配置文件的能力。当它发现它没有以完全管理员访问权限运行时,可以从您的 exe 中完成此操作。

【讨论】:

  • 问题是我无法更改或重新编译exe,它是一个java应用程序,我也尝试了runas /user:admin命令,但它没有显示对话框提示,而是命令行密码提示
  • 是的,XP 没有 UAC 或提升的概念。如果该用户没有管理员权限,您唯一的选择是作为另一个用户运行。
  • 我也调整了答案,runas 只是 CLI,你需要使用 runas 动词来代替 ShellExecute()
  • 快捷方式有一个“以管理员身份运行”属性(在 GUI 中的“高级”下)。我想应该可以使用 Powershell 或 VBScript 设置的此属性创建快捷方式,尽管我认为 Inno Setup 具有用于操作快捷方式的内置机制。
  • @Deanna:不,它肯定会改变快捷方式。我刚刚在网络驱动器上创建了两个 cmd.exe 的快捷方式,并在其中一个上设置了“以管理员身份运行”标志。此更改按预期对一个快捷方式起作用,但不影响另一个快捷方式。此外,从另一台计算机打开标记的快捷方式会导致提升,因此该标志不能存储在注册表中。 (Windows 7。)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    可以做到shortcutjs.bat:

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

    -adminpermissions yes 用于以管理员身份运行 bat。您需要脚本的完整路径。

    “以管理员身份运行”勾选在 .lnk 文件(第 21 个字符)中设置二进制标志,这也是脚本正在执行的操作 - 将其读取为二进制流并更改该值。

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多