2017-04-24 2 views
-2

Wie kann ich meine Qt-Anwendung als Administrator starten oder eine Eingabeaufforderung erhalten, wenn Administratorrechte erforderlich sind? Ich habe alles in den Posts versucht, die ich darüber finden konnte und die meisten von ihnen sind ein paar Jahre alt. Nichts hat funktioniert und jeder scheint einen anderen Spin zu haben. Ich habe das Windows SDK heruntergeladen, um mt.exe zu erhalten, erstellte die Manifest-Dateien, die RC-Datei und alle anderen Methoden einschließlich Rechtsklick und setze die Anwendung so, dass sie im Administrator-Modus startet. Nichts hat funktioniert. Ich brauche es, weil eine Aufgabe in meinem Programm Administratorrechte erfordert. QFile :: errorString() sagt Zugriff verweigert. Weiß jemand, wie das funktioniert?So führen Sie eine Anwendung als Administrator in Qt

+0

Das hängt nicht von Qt ab, aber auf Ihrem Betriebssystem sollten Sie ihnen Administratorrechte für Ihre ausführbare Datei geben – eyllanesc

+0

@eyllanesc Ich tat das. Es hat immer noch nicht funktioniert. – equati0n

+0

@eyllanesc Ich habe ein Antivirenprogramm und habe einige Dateien auf meinem C-Laufwerk abgelegt. Ich möchte sie löschen können. Die Dateien werden nicht gelöscht. Der Zugriff wurde verweigert. Das Löschen einzelner Dateien an anderen Orten funktioniert einwandfrei. – equati0n

Antwort

1

Okay, also habe ich die Antwort auf meine Frage gefunden. Ich hatte vorher schon einige Lösungen gefunden, die aber nicht funktionierten. Ich fand den Grund, warum sie nicht arbeiteten. Der Grund war sehr dumm: Es war, weil der Ordner, in dem sich meine Dateien befanden, ein Leerzeichen zwischen dem ersten und zweiten Wort hatte (meine App), was zu einem Fehler führte, dass der Ort nicht gefunden werden konnte kein Platz. Der Fehler bezüglich des nicht gefundenen Standorts trat nur auf, wenn versucht wurde, die adim-Berechtigungen hinzuzufügen. Ansonsten hat alles gut funktioniert und es gab keine Fehler. Also hier ist die Lösung und stellen Sie sicher, dass keine Leerzeichen in Ordnernamen sind.

1) Erstellen Sie die RC-Datei: Öffnen Sie den Editor und fügen Sie den folgenden Text innerhalb dann Speichern Sie die Datei als yourappname.rc Dies erstellt die RC Datei. Legen Sie die Datei in den Ordner, der alle Ihre Quellcode und Pro Datei enthält.

#include <windows.h> 
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "yourappname.exe.manifest" 

2) Erstellen Sie die Manifest-Datei mit Notepad, fügen Sie den folgenden Text, und es als yourappname.exe.manifest speichern und sie an der gleichen Stelle setzen, wie oben.

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity version="2.0.0.0" processorArchitecture="X86" 
    name="yourappname.yourappname" type="win32" /> 
    <description>A discription of your app</description> 
    <dependency /> 
    <!-- Identify the application security requirements. --> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel 
      level="requireAdministrator" 
      uiAccess="false"/> 
     </requestedPrivileges> 
     </security> 
    </trustInfo> 
</assembly> 

3) In der Pro-Datei setzen Sie den folgenden Text ein:

win32 { 
    RC_FILE = yourappname.rc 
} 

Das ist es. Jetzt sollte Ihre Anwendung mit Administratorrechten beginnen.

Es gibt ähnliche Post, die diesen Prozess auch beschreiben. Stellen Sie nur sicher, dass keine Leerzeichen in Ihren Ordnernamen sind oder es nicht funktioniert. Außerdem müssen Sie qt mit Administratorrechten ausführen, damit es funktioniert. Klicken Sie mit der rechten Maustaste auf Qt, und führen Sie als Administrator aus, bevor Sie versuchen, zu kompilieren.

0

der Admin-Eingabeaufforderung bekommen benötigen, habe ich

QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\" 

meiner Qmake Datei einfach angezeigt werden soll. Ich benutze dies in meinen Projekten die ganze Zeit.

+0

Fehler:/MANIFESTUAC: level = 'requireAdministrator' uiAccess = 'false': Keine solche Datei oder kein Verzeichnis – equati0n

Verwandte Themen