Я пытаюсь запустить другой процесс с запуском 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 выключен. Он должен по-прежнему требовать смарт-карты при входе в систему.
Не похоже, что я смогу обойти это. Любые идеи/советы будут оценены.