我正在嘗試用 C# 創建一些東西,比如 Linux 的 sudo。我找到了一種使用密碼以不同用戶身份運行該行程的方法,但我想在沒有密碼的情況下執行此操作。
此外,我的 C# 軟體以管理員身份運行并通過了 UAC。
我目前的代碼:
static void CreateProcessAsUser(string name, string path, SecureString password)
{
Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = path;
proc.StartInfo.UserName = name;
proc.StartInfo.Password = password;
proc.Start();
}
謝謝你。
uj5u.com熱心網友回復:
Windows 不是 Linux,因此您不能期望像 sudo 這樣的功能。
無論您使用哪種編程語言(C# 或 C ),您都需要在內心深處呼叫RunProcessAsUser(不,不是您當前的代碼,因為您的代碼太簡單了)來初始化作為另一個用戶帳戶運行的行程。該 API 反過來需要一個用戶令牌,您可以通過 使用用戶憑據(又名密碼)創建該令牌,或者LogonUser通過DuplicateToken.
所以避免密碼的唯一方法是在這臺機器上找到一個有效的用戶令牌(一旦該用戶登錄)。
您可能想知道哪些應用程式使用如此復雜的機制以及為什么。一個例子是您的防病毒軟體,它的主要組件是以管理員身份運行的 Windows 服務。此服務檢測誰登錄到機器,然后啟動托盤圖示應用程式。(這是復制用戶令牌并以該用戶身份創建行程的最佳時機。)
如果您的目標不是涵蓋類似的場景,我想知道您是否應該繼續走這條路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/364499.html
