webentwicklung-frage-antwort-db.com.de

So erzwingen Sie die Ausführung einer WPF-Anwendung im Administratormodus

Ich habe eine WPF-Anwendung, die auf Windows-Dienste und Taskplaner auf dem lokalen Computer zugreift. Wenn ich diese WPF-Anwendung bereitstelle und ohne "Als Administrator ausführen" ausführe, schlägt sie fehl, da sie nicht auf die Windows-Dienste und Taskplaner auf dem lokalen Computer zugreifen kann. Wenn ich es mit "Als Administrator ausführen" ausführe, funktioniert es korrekt.

Wie kann ich meine Anwendung standardmäßig im Administratormodus ausführen lassen, wenn sie in der Produktion bereitgestellt wird?

43
SVI

Sie müssen einen app.manifest hinzufügen. Ändern Sie das requestedExecutionLevel von asInvoker bis requireAdministrator. Sie können ein neues Manifest erstellen, indem Sie das Dialogfeld "Datei hinzufügen" verwenden. Ändern Sie es so, dass ein Administrator erforderlich ist. Stellen Sie sicher, dass in Ihren Projekteinstellungen auch dieses Manifest verwendet wird. Auf diese Weise können Sie einfach auf die Anwendung doppelklicken, und es wird automatisch zur Erhöhung aufgefordert, wenn dies nicht bereits der Fall ist.

Siehe hier für weitere Dokumentation:

http://msdn.Microsoft.com/de-de/library/bb756929.aspx

BEARBEITEN: Der Artikel verwendet VS 2005 und verwendet mt.exe, um das Manifest einzubetten. Wenn Sie Visual Studio 2008+ verwenden, ist dies integriert. Öffnen Sie einfach die Eigenschaften Ihres Projekts, und auf der Registerkarte "Anwendung" können Sie das Manifest auswählen.

71
vcsjones
  1. Klicken Sie mit der rechten Maustaste auf Ihr WPF-Projekt, um ein neues Element hinzuzufügen: "Hinzufügen-> Neues Element ...".
  2. Wählen Sie "Anwendungsmanifestdatei" und klicken Sie auf "Hinzufügen"
  3. Doppelklicken Sie auf Ihre neu erstellte Manifestdatei und ändern Sie die 
    <requestedExecutionLevel level="asInvoker" uiAccess="false" />

zu

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

Dann würde die WPF-Anwendung als Administrator ausgeführt.

1
SLdragon

Wenn Sie das Clickonce nicht gebrochen haben möchten, ist dieser Code die beste Lösung:

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);
}

Gegründet in: http://matijabozicevic.com/blog/wpf-winforms-development/running-a-clickonce-application-as-administrator-also-for-windows-8

0
Mårshåll