2014-03-24 61 views
0

我試圖打電話給具有管理員權限的批處理文件中使用一些C#代碼System.Diagnostic這裏提到的Process.Start()How to start a Process as administrator mode in C#C#的Process.Start()上的Windows Embedded POSReady管理員權限2009年

我從提升的命令提示符以及runas /user:administrator program.exe調用內置的可執行文件。子程序在我的程序外部調用時成功,但在由程序調用時管理員任務失敗。

我試圖使用清單並設置Process.Verb = "runas",但沒有運氣。

子進程安裝驅動程序,如果相關,我的程序會驗證版本號。

謝謝你的幫助!

+0

您的程序是否以管理權限運行?您從程序中產生的任何進程都將擁有與生成進程相同的權限。 – aevitas

回答

0

確保你在你的應用程序的清單下面幾行:

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    </requestedPrivileges> 

您的申請將在同一高度的水平本身產生其他進程。這意味着如果您的應用程序以非管理員身份運行,則它所生成的每個進程都將在沒有管理權限的情況下運行。

在開始批處理文件之前,請確保您的父應用程序具有提升的權限。

+0

這就是我認爲發生的事情,任務管理器報告該子進程正在使用管理員帳戶運行,但不知何故,因爲沒有安裝驅動程序,所以權限不在那裏。 – user3456395

+0

那麼,如果它在管理員帳戶下運行,它仍然可以在沒有管理權限的情況下運行。您需要在您的應用程序清單中明確要求管理員來獲取提升的權限。 – aevitas

+0

我已經嘗試再次爲我的程序設置requestedExecutionLevel,並且我已驗證它以管理員權限運行(已通過文件/註冊表修改測試)。有沒有一種方法來指定批處理文件的requestedExecutionLevel?子程序仍然沒有主程序具有的相同權限。 – user3456395

0

原因:管理員權限僅在使用runas時纔會提供給可執行文件,因此您無法直接調用批處理文件。您應該使用p.StartInfo.FileName = "cmd.exe"p.StartInfo.Arguments = " /C ..."來代替p.StartInfo.FileName = program.bat