C++ Programmstart mit Adminmodus erzwingen?

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.106
Gibt es irgendwelche Flags wo das Programm den Start mit Adminmodus verlangt? Unter XP habe ich keine Probleme, aber sobald ich mein Programm auf Vista ausführe brauche ich Adminrechte um Daten schreiben zu können (auf die Festplatte).
Kennt da jemand eine Lösung?
 
Gibt es unter Vista auch Probleme, wenn das Programm ins Userverzeichnis schreiben soll?
Also ein Ort, wo der aktuelle User definitiv Schreibrechte hat?
 
Ich möchte mich der Frage aber mal direkt anschließen. Programmiere auch - und selbst wenn ich bisher perfekt ohne Vista leben konnte, so sollen meine Programme doch auch bei Vista-(und späteren Seven-)Nutzern möglichst gut laufen. Die "Rechtsklick-Methode" ist einfach ein Hindernis.

Klar kann man jetzt mit dem Argument kommen, dass doch so das User-Prinzip etc. total verweichlicht wird und bla. Trotzdem gibt es genug Programme (z.B. umfangreichere Installationen), die eben Adminrechte brauchen.

/edit: ausgehen tue ich aber davon, dass das Programm mittels SecurityDescriptors überprüft, welche Rechte es hat und dann gegebenenfalls irgend eine Vista-Kernel-Funktion aufruft die bei Bestätigung dem Programm erlaubt als Admin zu hantieren. Oder, sollte das Programm "sich selbst die Adminrechte" geben, dass dann eben der Dialog kommt. Irgendsowas schwebt mir halt vor... mal sehen. Vielleicht weis ja jemand besser bescheid.
 
Zuletzt bearbeitet:
Ah cool. Dann kann ich ja ohne Umschweife meine alten Proggies Vista-tauglich machen. Das Manifest kann ich ja auch im Nachhinein bearbeiten - und da muss ja dann im Grunde nur noch das mit dem requireAdministrator rein :D
 
komisch bei mir funktionier es aber trotzdem nicht! was mache ich den falsch?

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<dependency>
		<dependentAssembly>
			<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
		</dependentAssembly>
	</dependency>
	<v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
		<v3:security>
			<v3:requestedPrivileges>
				<!-- level can be "asInvoker", "highestAvailable", or "requireAdministrator" -->
				<v3:requestedExecutionLevel level="requireAdministrator" />
			</v3:requestedPrivileges>
		</v3:security>
	</v3:trustInfo>
</assembly>

unter manifesttool ein und ausgabe habe ich den namen auch hinzugefügt und in rc datei auch.

kann da vielleicht jemand weiterhelfen?
 
Najut.... ich hab das Problem selbst herausgefunden!

also die komplette Lösung ist:

sieh auf der seite

dazu verwende nicht den Postbuildereignis der Seite sondern die folgende...

Code:
$(WindowsSdkDir)bin\mt.exe" -manifest "$(ProjectDir)$(TargetName).exe.manifest"  –outputresource:"$(TargetDir)$(TargetFileName)";#1

Natürlich wird es nie richtig kompiliert wenn VS nicht unter Admin läuft.. also als Admin VS starten... und viel spass mit dem Programm haben :D

puuh das hat mir aber viel an Nerven gekostet!!

keine Ahnung wieso aber die Intermediat datei wird falsch erzeugt.... deswegen sollte man diese auch nachhinein auf requireAdministrator ändern.

hmm naja... das mit Postbuildereignis ist auch irgendwie nicht von Nöten. Bei mir gehts auch ohne. habs ausprobiert.
 
Zuletzt bearbeitet: (ne kleine ergänzung!)
Zurück
Oben