У меня есть приложение winforms, которое устанавливает другие приложения в цикле.Это работает правильно для учетной записи администратора в Windows 7, но у меня есть серьезные проблемы со стандартной учетной записью - приложению требуется повышение прав для записи в папку «Program Files (x86)».
Поэтому я пытаюсьзапросить повышение прав для определенного метода (который запускает установщики) в приложении winforms c #, используя этот код:
[System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Role = @"BUILTIN\Administrators")]
После получения ошибки я узнал из Интернета, что перед вызовом метода, которыйнесет вышеупомянутый атрибут, мне нужно написать это:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Я сделал это, и метод по-прежнему выдает следующее сообщение об ошибке:
Сбой запроса основного участника.
Пошаговая отладка пропускает строку SetPrincipalPolicy, но когда она достигает метода с атрибутом Demand, она просто выдает ту же ошибку, как если бы SetPrincipalPolicy никогда не существовало.
AmЧто-то не так в настройке атрибута Demand должным образом?
Заранее спасибо.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: в соответствии с запросом приведен код, который должен вызывать запрос на повышение прав при автоматической установке приложения(но не работает):
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = principal.IsInRole(WindowsBuiltInRole.Administrator);
if (!hasAdministrativeRight)
{
ProcessStartInfo psi = new ProcessStartInfo(file);
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = true;
psi.Verb = "runas";
//psi.CreateNoWindow = true;
psi.Arguments = modifiers;
try
{
using (Process process = Process.Start(psi))
{
process.WaitForExit();
if (process.HasExited)
return process.ExitCode;
}
}
catch (Win32Exception wex)
{
}
}
Мне нужно, чтобы этот процесс выдал диалоговое окно с запросом имени пользователя и пароля для администратора, если приложение запускалось под Windows Standard User.Только процесс, запущенный программно выше, должен запускаться от имени администратора, само основное приложение может оставаться обычным пользователем.