如何将管理员权限添加到AutoHotkey脚本?

7
我将其编译成可执行文件,但是要打开它,我必须右键单击并按“以管理员身份运行”。我希望每次运行时都能请求管理员权限,但如何做到呢?
我无法这样做:
因为当我将它复制到第二台计算机上时会失效。
3个回答

17

尝试将以下内容添加到自动执行部分(脚本顶部):

; If the script is not elevated, relaunch as administrator and kill current instance:

full_command_line := DllCall("GetCommandLine", "str")

if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
    try ; leads to having the script re-launching itself as administrator
    {
        if A_IsCompiled
            Run *RunAs "%A_ScriptFullPath%" /restart
        else
            Run *RunAs "%A_AhkPath%" /restart "%A_ScriptFullPath%"
    }
    ExitApp
}

并重新编译脚本。

更多详情请阅读https://autohotkey.com/docs/commands/Run.htm#RunAs


6
这里有一个更简单的代码来实现这个目的:
#SingleInstance Force

if not A_IsAdmin

  Run *RunAs "%A_ScriptFullPath%"

如果脚本没有以管理员身份运行,它将作为管理员运行该脚本。如果您的脚本顶部没有“#SingleInstance Force”,它会询问您是否要用管理员替换运行中的脚本(非管理员)。因此,为了防止这种情况,请在脚本顶部添加上述行。 如果您将来可能会编译脚本,最好使用这个版本来使其具备未来性:
#SingleInstance Force

if !A_IsAdmin
    Run, % "*RunAs " (A_IsCompiled ? "" : A_AhkPath " ") Chr(34) A_ScriptFullPath Chr(34)

Chr(34) 返回字符 "

来源:https://www.autohotkey.com/boards/viewtopic.php?t=39647


无法工作,因为 #SingleInstance Force 尝试终止已经在运行的脚本,但失败了(因为正在运行的脚本是以管理员身份运行的,但新的调用不是)。 - snath03

0

在AHK V2中

#SingleInstance Force
full_command_line := DllCall("GetCommandLine", "str")
if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
  try
  {
    if A_IsCompiled
      Run '*RunAs "' A_ScriptFullPath '" /restart'
    else
      Run '*RunAs "' A_AhkPath '" /restart "' A_ScriptFullPath '"'
  }
  ExitApp
}

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