2013-09-29 36 views
0

平臺和設置:的RegWrite返回的ErrorLevel 1個

AutoHotkey_L的Unicode 86 1.1.13.0

RegView =默認

64位操作系統(W7)

32位腳本

嗨夥計,

以下代碼行返回錯誤等級= 1:

的RegWrite,REG_DWORD,HKLM,SOFTWARE \微軟\的Windows \ CurrentVersion \政策\系統,PromptOnSecureDesktop,0

當我手動修改註冊表,它工作正常。順便說一句,RegWrite以與ANSI x86二進制文件相同的方式失敗(我還沒有嘗試Unicode x64二進制文件)。任何人都知道爲什麼RegWrite失敗?謝謝,喬

+4

也許是因爲你需要運行[用管理員權限(http://www.autohotkey.com/board/topic/46526-run -as-管理員xpvista7-A-isadmin-PARAMS-LIB/p = 311068)。 – MCL

+0

@MCL,就是這樣!非常感謝。問候,喬 – user2829469

回答

0

註冊表項的操縱通常假定管理員權限,如果UAC未關閉,則必須明確獲取WIN Vista或更高版本的管理員權限。
對於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 
    } 
} 
+0

我發現你的提示後昨天的代碼,但我不明白它在做什麼。我發現它的很多引用(包括早期版本,不能與編譯腳本或傳遞參數一起工作),所以我確信它可以工作,但我沒有找到任何解釋它的東西。我想在腳本中使用它之前先理解它。對此有何建議?謝謝,Joe – user2829469

+0

@ user2829469這個腳本基本上分別調用Windows API函數'ShellExecute'或'ShellExecuteA',這取決於你的AHK版本。參數'「RunAs」'是提升UAC權限的一種技巧。其他參數應該是非常直接的,指定可執行文件的路徑以及腳本首先接收的啓動參數。查看[Win API文檔中的ShellExecute](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v = vs.85).aspx)。 – MCL

+0

MCL, 我會看看ShellExecute文檔,如果我有任何問題,請回復您。非常感謝,喬 – user2829469