Как заставить приложение WPF работать в режиме администратора
У меня есть приложение WPF, которое обращается к службам windows, планировщикам задач на локальном компьютере. Когда я развертываю это приложение WPF и запускаю его без "Запуск от имени администратора" , он терпит неудачу, поскольку он не может получить доступ к службам windows и планировщикам задач на локальном компьютере. Если я запускаю его с помощью "Запуск от имени администратора", он работает правильно.
Как заставить мое приложение по умолчанию работать в режиме администратора, когда оно развернуто в производстве?
2 ответов
вам нужно добавить app.manifest
. Изменить requestedExecutionLevel
от asInvoker
to requireAdministrator
. Новый манифест можно создать с помощью диалогового окна "Добавить файл", изменив его на "Требуется администратор". Убедитесь, что параметры проекта настроены на использование этого манифеста. Это позволит вам просто дважды щелкнуть приложение, и оно автоматически запросит повышение, если оно еще не сделано.
Подробнее см. здесь документация:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
изменить:
Для чего это стоит, статья использует VS 2005 и использует mt.exe
для внедрения манифеста. если вы используете Visual studio 2008+, это встроено. Просто откройте свойства проекта и на вкладке "приложения" вы можете выбрать манифеста.
Если вы не хотите сломать Clickonce, этот код является лучшим решением:
using System.Security.Principal;
using System.Management;
using System.Diagnostics;
using System.Reflection;
//Put this code in the main entry point for the application
// Check if user is NOT admin
if (!IsRunningAsAdministrator())
{
// Setting up start info of the new process of the same application
ProcessStartInfo processStartInfo = new ProcessStartInfo(Assembly.GetEntryAssembly().CodeBase);
// Using operating shell and setting the ProcessStartInfo.Verb to “runas” will let it run as admin
processStartInfo.UseShellExecute = true;
processStartInfo.Verb = "runas";
// Start the application as new process
Process.Start(processStartInfo);
// Shut down the current (old) process
System.Windows.Forms.Application.Exit();
}
}
/// <summary>
/// Function that check's if current user is in Aministrator role
/// </summary>
/// <returns></returns>
public static bool IsRunningAsAdministrator()
{
// Get current Windows user
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
// Get current Windows user principal
WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
// Return TRUE if user is in role "Administrator"
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
основанный в: http://matijabozicevic.com/blog/wpf-winforms-development/running-a-clickonce-application-as-administrator-also-for-windows-8