Process.Start с другими учетными данными с включенным UAC
Я пытаюсь запустить другой процесс с Process.Start, работающим под другими учетными данными с включенным UAC. Я получаю следующую ошибку:
System.ComponentModel.Win32Exception: ошибка входа: ограничение учетной записи пользователя. Возможные причины: пустые пароли не допускаются, ограничения на время входа в систему или ограничение политики введено в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo) в System.Diagnostics.Process.Start ().
в System.Diagnostics.Process.Start (ProcessStartInfo startInfo)
Если я выключаю UAC, он работает нормально. Если я запускаю процесс без указания имени пользователя и пароля, он работает нормально. Ниже приведена копия кода:
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = command;
processInfo.Arguments = parameters;
processInfo.UserName = txtUserName.Text;
processInfo.Password = password;
processInfo.Domain = "myDomain";
processInfo.UseShellExecute = false;
processInfo.LoadUserProfile = true;
Process.Start(processInfo);
Я считаю, что это как-то связано с сеансом рабочего стола, но я не уверен, почему он работает, когда UAC выключен.
Будем весьма благодарны за любые идеи о том, как заставить это работать без отключения UAC, изменения реестра или изменения локальных / групповых политик.
Спасибо
РЕДАКТИРОВАТЬ
Процесс с кодом выше запускается от имени администратора:
static void Main(string[] args)
{
//make sure we are running with admin privileges
if (VerifyIsAdmin())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApp(args));
}
}
private static bool VerifyIsAdmin()
{
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (!isAdmin)
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = Application.ExecutablePath;
Process.Start(processInfo);
}
return isAdmin;
}
РЕДАКТИРОВАТЬ
ПыталсяCreateProcessWithLogonW ... была такая же проблема.
Похоже, что после дальнейшего поиска проблема с групповой политикой требует входа со смарт-картой (scforceoption). При этом я до сих пор не понимаю, почему это работает, когда UAC выключен. При входе в систему по-прежнему требуется смарт-карта.
Не похоже, что я смогу обойти это. Любые идеи / советы будут оценены.