Как только моя программа установлена на клиентской машине, как заставить мою программу запускаться как администратор в Windows 7?Как заставить приложение .NET работать под управлением администратора?
ответ
Вы захотите изменить манифест, который встроен в программу. Это работает на Visual Студия 2008 и выше: Project + Добавить новый элемент, выберите «Файл манифеста приложения». Изменение <requestedExecutionLevel>
элемента:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Пользователь получает UAC подсказку, когда они начинают программу. Используйте разумно; их терпение может быстро изнашиваться.
Если вы попытаетесь скомпилировать ошибку ClickOnce, см. Этот ответ: http://stackoverflow.com/questions/11023998/clickonce-does-not-support-the-request-execution-level-requireadministrator/11036922#11036922 – SSS
Ваш проект также должен быть настроен для использования манифеста приложения - в свойствах проекта, проверьте вкладку «Приложение» и убедитесь, что «Манифест:» в разделе «Ресурсы» установлен в ваш app.manifest (или что вы назвали. файл манифеста) –
Это не сработает, если вы используете clickonce –
Вы можете вставить файл манифеста в EXE-файл, который заставит Windows (7 или выше) всегда запускать программу в качестве администратора.
Дополнительную информацию можно получить в Step 6: Create and Embed an Application Manifest (UAC) (MSDN).
Добавление элемента requestedExecutionLevel
к вашему манифесту - это только половина битвы; вы должны помнить, что UAC можно отключить. Если это так, вам нужно выполнить проверку старого школьного пути и установить диалоговое окно с ошибкой, если пользователь не является администратором
(позвоните по номеру IsInRole(WindowsBuiltInRole.Administrator)
на странице вашего потока).
Вы можете также использовать '
@MarkKram: Что highestAvailable нужно сделать с этим? Вопрос заключается в том, чтобы заставить администратора, upperAvailable менее ограничительный, чем requireAdministrator, и позволит пользователю без права администратора запускать приложение без повышения без приглашения UAC, только администраторы получат запрос ... – Anders
[Вот пример MSDN для ' IsInRole'] (https://msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx), говорит Андерс. –
В Visual Studio 2010 щелкните правой кнопкой мыши название вашего проекта. Нажмите «Просмотр настроек Windows», это создает и открывает файл под названием «app.manifest». В этом файле заменить «asInvoker» на «requireAdministrator», как описано в комментариях в файле.
Этот ответ касается VB.NET :-), а не VS 2010 в целом. Ответы «Добавить новый элемент» - это C#. В C++ вы можете сделать это в настройках проекта. – Philm
Работая над Visual Студия 2008, щелкните правой кнопкой мыши по Project -> Add New Item
, а затем выберите Application Manifest File
.
В файле манифеста, вы увидите тег requestedExecutionLevel
, и вы можете установить уровень трех значений:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
ИЛИ
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
ИЛИ
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Чтобы настроить приложение как администратор, вы должны выбрать средний.
Это работает. Однако при запуске приложения CMD появилось пустое CMD-окно (с помощью приложения C# cmd для запуска некоторых exe в фоновом режиме). –
По
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
вы хотите добавить манифест приложения, если вы уже не имеете один или не знаете, как добавить один. Поскольку некоторые проекты автоматически не добавляют отдельный файл манифеста, сначала перейдите к свойствам проекта, перейдите на вкладку «Приложение » и убедитесь, что ваш проект не исключает манифест в нижней части крана.
- Затем правый проект нажмите
- Добавить новый пункт
- Последних, найти и нажмите Application Manifest File
Я реализовал код, чтобы сделать это вручную:
using System.Security.Principal;
public bool IsUserAdministrator()
{
bool isAdmin;
try
{
WindowsIdentity user = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(user);
isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (UnauthorizedAccessException ex)
{
isAdmin = false;
}
catch (Exception ex)
{
isAdmin = false;
}
return isAdmin;
}
Это только определяет, запущен ли контекст как Admin, он не заставляет приложение запускаться как Admin в соответствии с запросом OP –
. Я не думаю, что есть какой-либо программный способ заставить приложение повысить свои собственные perms. Если бы это было, это было бы вполне угрозой безопасности, нет? –
Хотя ваше решение хорошее, но вопрос был другим. ;) – Yash
Щелкните правой кнопкой мыши свой исполняемый файл, откройте «Свойства»> «Совместимость» и установите флажок «Запустить эту программу в качестве администратора».
Если вы хотите запустить его как администратора для всех пользователей, сделайте то же самое в настройке изменения для всех пользователей.
Это не отвечает на вопрос. «Как только моя программа установлена на клиентской машине», а не «как я». – Joe
Извините, что не понимаете. Как только ваша программа установлена, измените этот параметр в свойствах вашего исполняемого файла (ваша основная программа, а не инсталлятор). Он действительно хочет заставить свою программу работать как администратор. – SlickJayD
Лучше установить требование администратора в манифесте. Я бы сказал, что он отвечает на вопрос, но едва ли. – BradleyDotNET
Другой способ сделать это, только в коде, - определить, работает ли процесс как администратор, как в the answer by @NG.. А затем снова откройте приложение и закройте текущий.
Я использую этот код, когда приложение требует только привилегии администратора при запуске при определенных условиях, например, при установке себя как службы. Таким образом, он не должен запускаться как администратор все время, как и другие ответы.
Примечание. Код NeedsToRunAsAdmin
- это метод, который определяет, требуется ли в современных условиях полномочия администратора. Если это вернет false
, код не будет повышаться. Это основное преимущество этого подхода над другими.
Хотя этот код имеет преимущества, указанные выше, ему необходимо перезапустить себя как новый процесс, который не всегда то, что вы хотите.
private static void Main(string[] args)
{
if (NeedsToRunAsAdmin() && !IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
foreach (string arg in args)
{
proc.Arguments += String.Format("\"{0}\" ", arg);
}
proc.Verb = "runas";
try
{
Process.Start(proc);
}
catch
{
Console.WriteLine("This application requires elevated credentials in order to operate correctly!");
}
}
else
{
//Normal program logic...
}
}
private static bool IsRunAsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
Подробные инструкции приведены ниже.
- Добавить приложения файл манифеста решения
- Изменить настройки приложения к "app.manifest"
- Update тег "requestedExecutionLevel" в requireAdministrator.
Обратите внимание, что с помощью этого кода необходимо отключить параметры безопасности ClickOnce, для этого перейдите в Свойства - > Безопасность -> ClickOnce Security
Вы можете создать манифест с помощью ClickOnce Параметры безопасности, а затем отключить его:
Right click on the Project -> Properties -> Security -> Enable ClickOnce Security Settings
После нажатия его, файл будет создан в свойствах проекта папки под названием приложения.проявляется как только это будет создано, вы можете снять Enable ClickOnce Security Settings
опции
Откройте этот файл и измените эту строку:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
к:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Это сделает программу требует привилегий администратора.
Отличная благодарность @yochai Timmer. –
- 1. Как заставить приложение работать с правами администратора
- 2. Как заставить пользователя веб-приложение работать под?
- 3. Как заставить приложение, скомпилированное для целевой платформы .NET Framework 4, работать под .NET framework 4.6.1?
- 4. Приложение .NET 2/3 отказывается работать под .NET 4
- 5. Как заставить агент PNUnit работать под .NET 4.0.
- 6. Как получить сборку .NET под управлением Delphi с сетевого диска?
- 7. Как заставить приложение .NET работать с холодным хостом
- 8. Приложение ASP.NET и пользователь работает под управлением
- 9. приложение, работающее под управлением Android, не работает
- 10. Веб-приложение Java, работающее под управлением tomcat
- 11. Как заставить мое приложение F # работать как администратор?
- 12. Как повернуть подкласс NSView под управлением CALayer
- 13. Отладка тестов под управлением NUnit
- 14. delphi как заставить приложение закрыть под андроид
- 15. Ваше приложение разбилось на iPad под управлением iOS 8.4.1 iPhone работает под управлением iOS 8.4.1
- 16. C# .NET: Получить права администратора?
- 17. Разработка под управлением UI
- 18. Веб-приложение IIS5 или IIS6 работает под управлением IIS7?
- 19. Как заставить приложение работать в фоновом режиме
- 20. Как заставить приложение работать на другом компьютере?
- 21. Как заставить приложение tasktray работать с tasktray
- 22. Как заставить приложение работать в appengine
- 23. Как узнать, работает ли приложение Android под управлением InstrumentationTestRunner?
- 24. Magento под управлением версии
- 25. xcodeproj под управлением версии
- 26. Как заставить приложение WPF работать как дочерний процесс в Citrix
- 27. Как заставить панель администратора Wordpress работать с загрузкой AJAX
- 28. Как заставить приложение работать как приложение gmail на Android?
- 29. Помещение eclipse под управлением версии
- 30. Разработка под управлением домена, .NET и инфраструктура Entity
Кроме того, что написал Binary Worrier, вы можете написать код, чтобы проверить, если у вас есть права администратора .. (это то, что вы просите?) – lexu
Я бы не принял эту задачу легко, хотя, вы должны проверить, что на самом деле нужен администратор, и посмотреть, можете ли вы ее обойти. Ни один клиент не будет счастлив работать с приложением в режиме администратора все время. Многие крупные клиенты даже не рассмотрят такое приложение, и если для вас важно проверить логотип, это не пройдет. – Alex
Алекс очень в курсе. Если возможно, только при необходимости повышайте, в противном случае вступают в действие групповая политика, UAC и ряд других переменных. По крайней мере, с UAC пользователь должен будет авторизоваться при каждом запуске, а не только при выполнении определенного действия пользователя. –