2012-04-11 12 views
1

Bevor ich anfange, möchte ich mich für mein fast nicht vorhandenes Wissen über die Programmierung von UAC entschuldigen. Das sagte ...Ist eine Manifestdatei für nicht verwalteten Code erforderlich?

Ich habe eine C# -Anwendung, die die Setup.exe eines völlig anderen Programms startet. Sein Hauptzweck ist es, dieses zweite Programm unter UAC zu unterstützen. Kurz gesagt, es läuft die Datei setup.exe unter einer erhöhten Eingabeaufforderung. Ich habe keine Kontrolle über dieses zweite Programm, also ist es keine Option, es als UAC kompatibel zu machen. Ich habe mein Programm geschrieben, als Vista zum ersten Mal veröffentlicht wurde und es wenig UAC-Informationen zu finden gab. Beachten Sie, dass das Ausführen der Datei setup.exe auf diese Weise funktioniert und dass das Programm mit aktivierter Benutzerkontensteuerung ausgeführt werden kann. Aber Teil meines Programms fügt auch eine Datei "theirapp.exe.manifest" mit "requireAdministrator" als Ausführungsebene hinzu. Also meine Frage ist das, brauche ich sogar diese Datei, wenn das Programm, das ich letztendlich ausführen möchte, eine nicht verwaltete Anwendung (CBuilder C++) ist. Irgendwo auf dem Weg glaubte ich, dass eine Manifest-Datei benötigt wurde. Aber jetzt wird mir gesagt, dass sie nur für .NET-Apps arbeiten.

Dank

EDIT: Um es zusammenzufassen ... Ist Manifest-Datei eine nicht verwaltete Programm unter UAC laufen benötigt?

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
    <requestedPrivileges> 
     <requestedExecutionLevel 
     level="requireAdministrator" 
     uiAccess="false"/> 
    </requestedPrivileges> 
    </security> 
</trustInfo> 

EDIT: Meine wichtigste Methode für die anderen Programme

private void RunElevated() 
{ 
    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/C " + AppDomain.CurrentDomain.BaseDirectory + @"setup.exe"); 
    processInfo.Verb = "runas"; 

    try 
    { 
     Process.Start(processInfo); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 
} 
+1

Manifestdateien sind * nicht * nur für verwaltete (.NET) Anwendungen. Die beiden Konzepte haben nichts miteinander zu tun. –

Antwort

0

Diese link beantwortet meine Frage. Ich nehme an, die Tatsache, dass es sich auf eine Manifest-Datei für eine nicht gemanagte DLL bezieht, hat meine Suche abgeworfen.

3

in Visual C++ setup.exe Sie die Optionen unter den Manifest-Optionen (Teil des Linkers Einstellungen) finden:

+0

Das Programm, das ich unter UAC ausführen möchte, gehört nicht mir und ich habe keine Kontrolle darüber. Es ist auch mit CBuilder und nicht Visual C++ geschrieben. – JimDel

+0

Sie sollten weiterhin in der Lage sein, eine Manifestdatei zu verwenden, die neben der ausführbaren Datei sitzt (nicht sicher, ob CBuilder sie richtig einbetten kann). Als alternativen Ansatz könnten Sie den Child-Prozess erstellen, der erhöhte Privilegien dafür anfordert (wie viele Setup-Bootstraps). EDIT: Nur um zu verdeutlichen: Ihr eigener Wrapper/Loader wird mit CBuilder geschrieben und das zu startende Programm ist im Wesentlichen proprietär/closed source? – Mario

+0

Nein, mein Wrapper ist C# und die App, die ich unter UAC ausführen möchte, ist C++ und ich kann sie nicht ändern. Ich habe oben die Hauptmethode hinzugefügt. Ich füge nur die Manifest-Datei hinzu, nachdem dieser Vorgang abgeschlossen ist. Ich bin mir nur nicht sicher, ob es da sein muss. Wenn ich etwas teste, finde ich es manchmal gebraucht und manchmal nicht. – JimDel

Verwandte Themen