ユーザーに管理者パスワードを持たせたくないため、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();
}
ただし、上記のコードの実行によるエラーはUnknown error (0xfffffffe)です。
必要に応じて、エラーの詳細を提供できます。