【问题标题】:RegWrite returning ErrorLevel 1RegWrite 返回 ErrorLevel 1
【发布时间】:2013-10-02 15:47:51
【问题描述】:

平台和设置:

AutoHotkey_L Unicode x86 1.1.13.0

RegView=默认

64 位操作系统 (W7)

32 位脚本

大家好,

以下代码行返回 ErrorLevel=1:

RegWrite,REG_DWORD,HKLM,SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System,PromptOnSecureDesktop,0

当我手动修改注册表时,它工作正常。顺便说一句,RegWrite 与 ANSI x86 二进制文件的失败方式相同(我没有尝试过 Unicode x64 二进制文件)。任何人都知道为什么 RegWrite 失败了?谢谢,乔

【问题讨论】:

  • 可能是因为你需要运行它with admin rights
  • @MCL,就是这样!非常感谢。问候,乔

标签: autohotkey


【解决方案1】:

注册表项的操作通常假定管理员权限,从 WIN Vista 或更高版本开始,如果未关闭 UAC,则必须明确获得该权限。
对于 AHK,请调用以下函数 (source):

RunAsAdmin() {
  Loop, %0%  ; For each parameter:
    {
      param := %A_Index%  ; Fetch the contents of the variable whose name is contained in A_Index.
      params .= A_Space . param
    }
  ShellExecute := A_IsUnicode ? "shell32\ShellExecute":"shell32\ShellExecuteA"

  if not A_IsAdmin
  {
      If A_IsCompiled
         DllCall(ShellExecute, uint, 0, str, "RunAs", str, A_ScriptFullPath, str, params , str, A_WorkingDir, int, 1)
      Else
         DllCall(ShellExecute, uint, 0, str, "RunAs", str, A_AhkPath, str, """" . A_ScriptFullPath . """" . A_Space . params, str, A_WorkingDir, int, 1)
      ExitApp
  }
}

【讨论】:

  • 我昨天在你的提示之后发现了那个代码,但我不明白它在做什么。我发现了很多对它的引用(包括不能使用编译脚本或传递参数的早期版本),所以我确信它有效,但我没有找到任何解释它的东西。在脚本中使用它之前,我想了解它。有什么建议吗?谢谢,乔
  • @user2829469 这个脚本基本上分别调用 Windows API 函数ShellExecuteShellExecuteA,具体取决于您的 AHK 版本。参数"RunAs" 是一种提升 UAC 权限的技巧。其他参数应该非常简单,指定可执行文件的路径以及可选的脚本首先接收的启动参数。查看ShellExecute in the Win API docs
  • MCL,我会看一下 ShellExecute 文档,如果有任何问题,我会回复你。非常感谢,乔
  • @user2829469 如果我的回答解决了您的问题,请考虑接受。这样,其他人就会知道您不再需要帮助。如果您有关于提升权限的后续问题,请将它们作为新问题发布在 SO 上。
  • 我之前一直在寻找一种方法来做到这一点,但没有看到。我更喜欢 AHK 用于论坛的上一个站点……这个 Stack Overflow 站点太可怕了。无论如何,我看到了向上和向下箭头(根本不清楚它们的作用)和复选标记,我猜它接受该评论作为答案,但它只出现在你的一个 cmets 上,所以它是一点也不明显如何接受另一个答案。我参与了很多论坛,对网站有很多不同的方法……这是迄今为止最糟糕的。无论如何,我会点击复选标记,看看会发生什么。问候,乔
猜你喜欢
  • 1970-01-01
  • 2020-12-01
  • 2019-01-08
  • 1970-01-01
  • 2018-08-10
  • 2015-03-04
  • 2013-10-27
  • 2016-07-28
  • 2014-09-26
相关资源
最近更新 更多