Как заставить приложение WPF работать в режиме администратора

У меня есть приложение WPF, которое обращается к службам Windows, планировщикам задач на локальном компьютере. Когда я развертываю это приложение WPF и запускаю его без «Запускать как администратор», он терпит неудачу, поскольку он не может получить доступ к службам Windows и планировщикам задач на локальном компьютере. Если я запустил его с помощью «Запуск от имени администратора», он работает правильно.

Как заставить приложение по умолчанию запускаться в режиме администратора, когда оно развертывается в процессе производства?

Вам нужно добавить app.manifest . Измените asInvoker с asInvoker на requireAdministrator . Вы можете создать новый манифест, используя диалог добавления файла, изменить его, чтобы потребовать администратора. Убедитесь, что в настройках вашего проекта установлено использование этого манифеста. Это позволит вам просто дважды щелкнуть приложение, и оно будет автоматически запрашивать возвышение, если оно еще не было.

См. Здесь дополнительную документацию:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

EDIT: для чего это стоит, статья использует 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(); } } ///  /// Function that check's if current user is in Aministrator role ///  ///  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

Давайте будем гением компьютера.