2009-11-12 126 views
10

目前,我的程序安裝程序已使用以下代碼使我的應用程序以管理權限運行。但它在Windows 7下似乎沒有任何作用。在Vista中它運行得非常漂亮。如果我右鍵單擊快捷方式並將其作爲管理員運行,程序將正常啓動。但是通過使用下面的代碼,它應該能夠始終以這種方式運行程序。它現在不在了。有誰知道如果贏7仍然使用此密鑰? UAC也在路上。註冊表中的RUNASADMIN似乎無法在Windows 7中工作

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\ 
CurrentVersion\AppCompatFlags\Layers", "C:\App\app.exe", "RUNASADMIN"); 

謝謝。

回答

6

我使用Windows 7,我可以看到這樣的鍵。但是,我不認爲這是配置應用程序和安裝程序的正確方法。

我的建議是,您隨應用程序(app.exe)一起發佈清單文件。如果您使用Visual Studio 2008,則清單文件甚至可以輕鬆嵌入到可執行文件中。然後,在清單文件中,您可以要求管理員權限。

http://msdn.microsoft.com/en-us/library/bb756929.aspx

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/

+0

感謝lextm。我不知道可以爲我沒有創建的exe文件創建清單文件。或者他們不必被嵌入。感謝您的鏈接。 – JimDel 2009-11-13 19:24:05

+0

@JimDel:所有這些鏈接似乎都與嵌入清單有關。你在哪裏看到我怎麼做「對於我沒有創建的exe文件?」 – Pete 2014-02-07 19:04:11

1
在Win7

RUNASADMIN置於KEY: 當HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers使用安裝屏蔽5.1,這些值被複制到appcpmctflgsin wow6432nodeexe actualy falis爲運行管理員。

+0

以及如何解決它? – 2015-11-25 14:13:35

8

我對這個問題的答案/解決方法。

首先,我不同意(恭敬地)與註釋,使用AppCompatFlags不是「配置您的應用程序和安裝適當的方式。」修改註冊表的這一部分僅僅是使用Windows GUI鏡像來更改可執行文件的權限級別。我發現這個方法比添加清單文件更容易實現。如果用戶想要或需要將特權級別更改爲不以管理員身份運行,則可以使用GUI輕鬆完成。

反正我有同樣的嘗試設置可執行文件的權限級別以管理員身份運行的問題。我們知道我們可以通過GUI設置它:

  • 右鍵單擊快捷方式或。EXE文件,並選擇屬性
  • 單擊兼容性選項卡上
  • (在這一點上,你可以設置權限級別只是你或爲所有用戶;我喜歡做它爲所有用戶)
  • 點擊按鈕,更改設置爲所有用戶
  • 新的屬性窗口打開標題爲「所有用戶的兼容性」
  • 根據權限級別檢查「以管理員身份運行此程序」,單擊確定幾次以保存更改。

當保存更改後,你會發現在註冊表中的設置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

當我設置了.exe使用GUI以這種方式以管理員身份運行,它始終工作。

但是,無論何時我試圖直接更改註冊表而不通過GUI,程序都不會以管理員身份運行。註冊表顯示我進行了更改,當我查看可執行文件的權限級別時,以管理員身份運行時被選中。

我嘗試了幾種不同的方式僅通過更改註冊表,使.exe以管理員身份運行:

  • 手工編輯用註冊表編輯器註冊表從.reg文件
  • 使用的
  • 進口的變化命令行工具reg.exe更改註冊表
  • 使用現已不存在的智能腳本工具
  • 使用的AutoIT腳本

所有這些方法都做了同樣的事情。註冊表已更改,GUI顯示該程序應以管理員身份運行,但該程序從不以管理員身份運行。

針對我偶然發現的這個問題的解決方法是繼續前進,並使用該設置更改HKCU密鑰和HKLM密鑰。

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

如果更改這兩個註冊表部分,那麼.exe將作爲管理員身份運行。更重要的是,如果不同的用戶登錄到PC,程序將以管理員身份運行。儘管註冊表的更改沒有作爲後續用戶的HKCU部分。

我不知道這裏發生了什麼,但它正在工作。

1

我用CMD使用下面的命令將此項添加到註冊表:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN 

這工作不錯的Win8Pro了32bit,但沒有作品在64位版本!
我發現在64Bit Win上運行這個命令(通過32位安裝程序作爲最終安裝階段運行),導致在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers上創建條目!
經過一番研究(感謝我的朋友H.先生Toosi),我們找到了正確的解決方案。
只需添加/reg:64 AT END較早的命令是這樣的:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN /reg:64 

,一切都包括32位和64位操作系統(Win 7的32位,運8 32位,運8.1 64位)正常。

相關問題