Вопрос по c# – Вынудили приложение иметь права администратора

5

Мне нужно предоставить права администратора приложения, зная, что оно будет запущено из сеанса пользователя, а не из учетной записи администратора.

Я просматривал другие сайты, но не могу найти ничего, что могло бы помочь.

Я попытался редактировать манифест между прочим и там вставил строку:

<code><requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</code>

Это выдало мне ошибку при попытке публикации с использованием ClickOnce, но не при отладке.

Вы можете мне помочь?

Ваш Ответ

2   ответа
5

действительно, это не предусмотрено проектом, чтобы установить приложение ClickOnce от имени администратора:http://msdn.microsoft.com/en-us/library/142dbbz4(v=vs.90).aspx

взгляните на этот пост:http://antscode.blogspot.ca/2011/02/running-clickonce-application-as.html - it explains how to run ClickOnce app as admin. BUT - it have to say that I have walked this path - and I did not have much luck with it. I had numerous troubles with this approach (trying to run ClickOnce app with admin privileges). As far as I recall, the biggest problem was auto-update was not working properly. Not to mention that non-admin users might need to enter admin credentials all the time.

So my advise would be to rethink your logic, and encapsulate the piece you need to be done as admin in a separate EXE file - и дать понять пользователю, что, когда он нажимает кнопку «ТО», появляется приглашение UAC (возможно, с помощью значка «щит» для кнопки). И в этом событии button_click сделайте что-то вроде этого:

// 2. Run Photoshop action on this image (and wait for the task to complete)
if (string.IsNullOrWhiteSpace(this.PhotoshopEnhanceActionAbsPath) == false)
{
    var pi = new ProcessStartInfo(this.PhotoshopEnhanceActionAbsPath,  "\"" + imgPhotoshopActionAbsPath + "\"");
    pi.UseShellExecute = true;
    pi.Verb = "runas";
    var photoshopAction = Process.Start(pi);
    var success = photoshopAction.WaitForExit();
    if (success == false)
    {
        // do something here
    }                
}

этот подход работал очень хорошо для меня. Ключ здесь заключается в следующем:

pi.UseShellExecute = true;
pi.Verb = "runas";

он запускает ваш EXE с правами администратора - поэтому в этот момент будет отображаться приглашение UAC. Еще одно приятное последствие заключается в том, что пользователи могут не запускать эту конкретную часть логики каждый раз, когда они используют приложение, и поэтому они не будут раздражены подсказкой, когда им это не нужно.

Да, я пытаюсь: Process clone = new Process (); System.Security.SecureString secret = new system.Security.SecureString (); foreach (char c in pwd) secret.AppendChar (c); clone.StartInfo.UserName = user; clone.StartInfo.Password = secret; clone.StartInfo.FileName = & quot; dsfo.exe & quot ;; clone.StartInfo.Arguments = lblAdress.Text + @ & quot; 0 0 & quot; + tmp + "ADC.img"; clone.StartInfo.UseShellExecute = false; clone.StartInfo.CreateNoWindow = true; clone.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; clone.Start (); Atoxis
вы пробовали ProcessStartInfo.WindowStylemsdn.microsoft.com/en-us/library/…
а без UAC подскажете? Atoxis
@ Matth Извините, у меня нет четкого ответа на ваш вопрос. Цель - запустить НЕКОТОРЫЙ код в режиме повышенных прав. Если вы не являетесь администратором, вам нужно это приглашение, чтобы поднять ваше приложение.
Инженеры, которые будут использовать это приложение, являются учетной записью пользователя на компьютере. приложение выполняет процесс prvil & ges, который требует администратора. Снаружи там невозможно по соображениям безопасности предоставить учетную запись администратора. Я просто хочу быть прозрачным в отношении пользователя. и по тому же принципу мне уже удалось запустить процесс без UAC благодаря командам p.StartInfo.UserName = & quot; user & quot; p.StartInfo.Password = & quot; секрет & quot; но единственное беспокойство заключается в том, что отображается моя командная строка. Хотя мне нравится, что он работает в фоновом режиме. Atoxis
1

Приложения ClickOnce предназначены для установки без прав администратора. Невозможно повысить их во время выполнения, поскольку это означает, что фактически пользователь, не имеющий прав администратора, может установить, а затем запустить приложение от имени администратора; это было бы угрозой безопасности.

Похожие вопросы