2013-03-13 93 views
8

我有一個控制檯應用程序,它是由erp軟件調用開發的。如何使控制檯應用程序始終以管理員身份運行?

他們在erp內部調用我的應用程序,當他們這樣做時,我總是得到與沒有足夠權限執行相關的錯誤。

我已經檢查了「運行這個程序作爲管理員」複選框的所有用戶的EXE的屬性,但結果是一樣的。

我讀過一些關於增加一個清單,這將使UAC對話框的應用程序的提示,但是那不是我想要的,因爲應用程序會從服務器和客戶機上ERP被稱爲將看不到服務器的對話框。

有人可以解釋我如何使這個控制檯應用程序始終以管理員身份運行?

+0

爲什麼此控制檯程序需要管理權限? – 2013-03-13 18:26:39

回答

7

第一,明白在這個過程中會有一個UAC對話框。沒有辦法避免它。有幾種方法可以採用:

  • 讓人們運行ERP軟件提升。我只是爲了完整而包括這個。當您通常不需要權限時,每次運行應用程序時必須同意UAC提示是非常可怕的。不過,這將是一個方便的快速測試,因爲您可以確認,如果您的應用程序升級,那麼事情就會起作用。從升級過程中啓動的所有內容都會提升,因此如果您的應用仍然收到錯誤消息,則不會通過提升來解決此問題。
  • 更改ERP應用程序中的代碼以啓動您的應用程序。你提到C#。用runas動詞發起是一種方法。這給ERP開發人員帶來了負擔,他們可能無法做到這一點。
  • 將清單添加到您的應用程序。您可以嵌入一個,或者如果您的應用程序被稱爲foo.exe,只需用適當的requestedExecutionLevel手動創建一個foo.exe.manifest文件即可。要嵌入一個,使用C#項目的Properties頁面來選擇正確的清單。確保將UseShellExecute設置爲true,否則清單將被忽略。

如果您選擇第一個選項,每次啓動ERP應用程序時都會出現UAC提示。不好。如果您選擇第二個或第三個,則每次從ERP應用程序啓動您的控制檯應用程序時,都會提示UAC提示。可能是可以接受的。

你可能會考慮的另一件事是更加關注爲什麼控制檯應用程序需要管理員權限。你在寫C或者Program Files的根目錄嗎?你在更新HKLM中的註冊表項嗎?無論你在做什麼,你爲什麼這樣做?除非您的應用程序安裝或配置了某些東西(在這種情況下,獲得UAC提示是否合適),您應該嘗試對其進行調整,以便將其寫入預先存儲的用戶並且不需要提升。那麼在任何情況下,你將不再擔心如何升高它。

+3

「你可能會考慮的另一件事是更加關注爲什麼控制檯應用程序需要管理員權限。」說得好。這正是恰當的問題。 – 2013-03-13 19:13:22

+0

weel我將x509證書添加到Windows Store中,從商店中讀取證書,訪問數據庫並連接到外部Web服務。是否必須擁有管理權限? – Marco 2013-03-14 09:42:25

+0

我還使用EventLog.WriteEntry()在事件查看器上記錄錯誤。所以我認爲我真的需要管理員權限。對? – Marco 2013-03-14 10:09:06

0

創建一個包含類似的批處理文件:

runas /env /user:%USERDOMAIN%\%USERNAME% cmd.exe /K YourProgramName.exe 

其中,%USERDOMAIN%和%USERNAME%是由您的管理員帳戶的細節所取代。

然後運行它?

+0

這將以該用戶身份運行該應用,但不會將該會話提升爲管理員的會話,即使該用戶擁有管理權限 – War 2016-12-09 17:07:13

22

添加到您的項目應用程序清單文件(添加 - >新建項目 - >常規 - >應用程序清單文件),並添加下面的節點進入app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

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

+0

優秀的修復方法,謝謝 – Linef4ult 2015-11-28 16:57:36

+0

這應該是答案,更直接簡單。 – 2017-05-09 06:17:50

相關問題