簡體   English   中英

從以管理員身份運行的進程中以用戶身份啟動進程

[英]Start a process as user from an process running as admin

我想從以管理員身份運行的程序中啟動另一個以用戶身份運行的程序。

問題是第二個程序需要使用Outlook,如果該程序以admin身份運行則不可能。 主程序需要以管理員身份運行。

我確實已經提出了這兩種解決方案:

Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\"");

要么

Process.Start("explorer.exe", "SomeProgram.exe");

但是我兩種解決方案都有問題。 第一個詢問用戶密碼(僅在Windows重新啟動后的第一次)。 第二個probalby將來將無法使用,因為據我所知,它被認為是一個錯誤,並且可能會在以后的更新中修復。

所以我想知道還有沒有其他解決方案,用戶不需要輸入密碼?

這似乎為我工作:

Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000  " + "\"SomeProgram.exe" + "\"");

Process類具有StartInfo屬性,該屬性是ProcessStartInfo類的實例。 此類公開UserNameDomainPassword成員以指定要運行該過程的用戶。

Process myProcess = new Process();
myProcess.StartInfo.FileName = fileName;
myProcess.StartInfo.UserName = userName;
myProcess.StartInfo.Domain = domain;
myProcess.StartInfo.Password = password;
myProcess.Start();

我遇到了同樣的問題,無法獲得當前登錄的用戶。 注意:查詢wmi不是解決方案,因為當時可能有許多用戶登錄,所以我的解決方案是反向操作。 以當前用戶身份啟動我的應用,如果當前用戶不是admin,我請求以admin身份運行。

if (IsAdministrator())
{
    // run whatever you want as elevated user
}
else
{
    //launch the same app as admin
    ExecuteAsAdmin(PATHH_TO_THE_SAME_APP.EXE);
    //execute whatever you want as current user.
}



public static void ExecuteAsAdmin(string fileName)
{
    Process proc = new Process();
    proc.StartInfo.FileName = fileName;
    proc.StartInfo.UseShellExecute = true;
    proc.StartInfo.Verb = "runas";

    proc.Start();
    proc.WaitForExit();
}

public static bool IsAdministrator()
{
    var identity = WindowsIdentity.GetCurrent();
    var principal = new WindowsPrincipal(identity);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM