0

可能重复:
Process.Start() 模拟问题

我正在尝试以 c# 中的其他用户身份运行控制台应用程序,但我遇到了麻烦。这是我的代码的一部分:

public void encryptPGP(string fileName)
{
    string sCommandLine = "" +
                "--recipient \"User Name <username@domain.com>\" --encrypt \"" + fileName + "\"";

    System.Diagnostics.Process.Start("C:\\Utilities\\GnuPG\\App\\gpg.exe", sCommandLine);
}

...我需要让某个用户运行 C:\Utilities\GnuPG\App\gpg.exe。我将如何添加它?

这将在 Web 应用程序中使用。

谢谢!

4

1 回答 1

1

您可以使用System.Diagnostics.ProcessStartInfo该类来提供要在其下启动该过程的用户凭据。请参阅下面的示例代码:

string userPwd = "secretPassword";
System.Security.SecureString pwd = new System.Security.SecureString();
foreach (char c in userPwd.ToCharArray())
{
    pwd.AppendChar(c);
}

System.Diagnostics.ProcessStartInfo inf = new System.Diagnostics.ProcessStartInfo();
inf.FileName="path to file";
inf.Domain = "domainname";
inf.UserName = "desired_user_name";
inf.Password = pwd;

System.Diagnostics.Process.Start(inf);

我个人还没有测试过这个解决方案,但它应该可以在 framework 2.0 之后工作。

希望它可以帮助你。

于 2012-09-20T04:42:51.577 回答