2010-11-05 65 views
8

我必須使用System.Diagnostics.Process.Start()啓動命令行程序並以管理員身份運行它。用C#管理員權限啓動進程

此操作也將由計劃任務每​​天運行。

+5

問題在哪裏? – 2010-11-05 14:11:33

回答

0

我找到了,我需要設置計劃任務運行在常規設置最高權限的應用程序。

9

我只是嘗試使用:

Process p = new Process(); 
p.StartInfo.Verb = "runas"; 

,如果我跑我的程序作爲管理員這工作得很好,但是當計劃任務運行它,它不走「運行方式」中考慮我想。

+0

Yepaaah。好的解決方案感謝分享。你讓我今天一整天都感覺很好! – Nasenbaer 2011-10-27 15:40:22

2

如果您正在使用計劃任務,則可以設置要在其下運行的任務的用戶和密碼。

在任務上使用管理員憑據,你會沒事的。

隨着Process.Start,您需要提供UserNamePasswordProcessStartInfo

Process p = new Process("pathto.exe"); 
p.StartInfo.UserName = "Administrator"; 
p.StartInfo.Password = "password"; 
p.Start(); 
4

使用登錄名和密碼運行進程的更安全的選項是使用SecureString類來加密密碼。這裏是一個代碼示例:

string pass = "yourpass"; 
string name ="login"; 
SecureString str; 
ProcessStartInfo startInfo = new ProcessStartInfo(); 
char[] chArray = pass.ToCharArray(); 
fixed (char* chRef = chArray) 
{ 
    str = new SecureString(chRef, chArray.Length); 
} 
startInfo.Password = str; 
startInfo.UserName = name; 
Process.Start(startInfo); 

您必須在您的項目屬性中允許不安全的代碼。

希望得到這個幫助。

1

請注意,只要有人可以仔細閱讀應用程序並查看其中的內容,以明文形式在程序中存儲密碼永遠不會安全。使用SecureString將存儲的密碼轉換爲SecureString密碼不會使其更安全,因爲明文密碼仍然存在。

使用SecureString的最佳方式是一次只傳遞一個字符進行轉換,而不需要在內存中或硬盤上的任何位置擁有完整的未加密密碼。在該角色被轉換之後,程序應該忘記它,然後繼續下一個。

這可以做,我認爲只有通過傳遞字符進行翻譯,因爲他們正在輸入到控制檯由用戶。