我正在尝试编写一个运行Draytek VPN客户端作为另一个用户的应用程序,因为我不希望用户拥有管理员密码,并且他们的帐户是标准用户。但是由于我尝试过的两种实现中的错误,我无法使其正常工作。
以下是我尝试过的一些示例代码:
System.Security.SecureString ss = new System.Security.SecureString();
foreach (var c in "password")
{
ss.AppendChar(c);
}
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.WorkingDirectory = "c:\\";
process.StartInfo.FileName = @"C:\Program Files (x86)\DrayTek\Smart VPN Client\SmartVPNClient.exe";
process.StartInfo.Verb = "runas";
process.StartInfo.UserName = "testUser";
process.StartInfo.Password = ss;
process.StartInfo.UseShellExecute = false;
process.Start();
我收到错误:请求的操作需要提升。
我还尝试使用问题Impersonating a Windows user中的代码进行模拟。我的电话会议实施如下:
using ( new Impersonator( "testUser", "", "password" ) )
{
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.WorkingDirectory = "c:\\";
process.StartInfo.FileName = @"C:\Program Files (x86)\DrayTek\Smart VPN Client\SmartVPNClient.exe";
process.StartInfo.Verb = "runas";
process.Start();
}
然而,运行上述代码的错误是未知错误(0xfffffffe)。
如果需要,我可以提供更多错误详情。
答案 0 :(得分:0)
关于第一种方法:
您获得“请求的操作需要提升”的事实意味着当前运行您的应用程序的用户不是以管理员身份运行,或者Draytek VPN客户端需要提升才能正常运行。
我对您的代码进行了以下更改:
process.StartInfo.Verb = "runas";
。并按如下方式进行测试:
Windows 7
Windows XP
所有测试都有效。在任务管理器中,我可以看到测试控制台在正确的帐户下运行。
以下是我用来运行测试的代码:
static void Main(string[] args)
{
Console.Write("User name:");
string user = Console.ReadLine();
Console.Write("Password:");
string password = Console.ReadLine();
Console.Write("File name:");
string fileName = Console.ReadLine();
System.Security.SecureString ss = new System.Security.SecureString();
foreach (var c in password)
{
ss.AppendChar(c);
}
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.WorkingDirectory = "c:\\";
process.StartInfo.FileName = fileName;
process.StartInfo.Verb = "runas";
process.StartInfo.UserName = user;
process.StartInfo.Password = ss;
process.StartInfo.UseShellExecute = false;
process.Start();
Console.ReadKey();
}
您是否尝试过运行其他应用程序而不是Draytek VPN Client作为测试?