Laden...

Process.Start("xx.pdf") mit Admin-Rechten unter Windows 8.x zeigt das Fenster nicht

Erstellt von Pioneer17 vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.161 Views
P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 9 Jahren
Process.Start("xx.pdf") mit Admin-Rechten unter Windows 8.x zeigt das Fenster nicht

Hallo zusammen,

in Windows 8.x habe ich das Problem, dass der Aufruf


Process.Start(Path.Combine(StartupPath, "Test.pdf"));

nicht richtig funktioniert.

Was heiss das genau: Meine Applikation startet mit Admin-Rechten. Wenn ich nun diesen Befehl ausführe, wird zwar der Prozess unter dem aktuell angemeldetem Benutzer gestartet, jedoch ist die GUI des Adobe Readers nicht ersichtlich.

Starte ich jedoch die gleiche Applikation ohne Admin-Rechte, funktioniert alles so wie es soll.

Nun die Frage:
Wie muss ein solcher Aufruf unter Windows 8.x richtigerweise implementiert werden?

Ziel soll sein, einfach ein PDF öffen zu können, egal ob die Applikation welche das durchführen soll, über Admin-Rechte verfügt oder nicht.

PS:
Folgendes habe ich bereits probiert, ebenfalls ohne Erfolg


ProcessStartInfo procInfo = new ProcessStartInfo();
                    procInfo.UseShellExecute = true;
                    procInfo.WorkingDirectory = Environment.CurrentDirectory;
                    procInfo.FileName = Path.Combine(StartupPath, "Test.pdf");
                    //procInfo.Verb = "runas";

                    try
                    {
                        Process.Start(procInfo);
                    }
                    catch { }

"runas" ist auskommentiert, weil wenn das aktiviert ist, kommt die Fehlermeldung, dass der Datei keine Applikation zugewiesen ist.

Danke für die Hilfe.

16.807 Beiträge seit 2008
vor 9 Jahren

Vermutlich musst Du auch hier einen Token duplizieren; das funktioniert über das Handle des Users (am besten über die DesktopShell, da dies keine Adminrechte hat, egal bei welchem User) und mit dem Token dann den Prozess starten (mit Hilfe von CreateProcessWithTokenW).

Edit: Launch a Process as Standard User from an Elevated Process und dahingehend User Account Control Helpers scheinen sehr vielversprechend zu sein.

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 9 Jahren

Hi Abt,

Danke für diesen für diesen Link. Auf diese Art und weise funktioniert es in der Tat.
Nun habe ich noch die Unschönheit, dass ich bei dieser Lösung die Applikation angeben muss welche ich starten will.

Mit dem Aufruf


Process.Start(Path.Combine(StartupPath, "Test.pdf")); 

übergebe ich dem System lediglich das PDF. Das System öffnet dann von sich aus das installierte PDF Programm.

Bei der anderen Lösung, muss ich wissen, ob Adobe PDF oder ein anderer PDF Viewer installiert ist, damit ich den Pfad zu dieser Exe angeben könnte.

Gibt es dazu ggf. auch eine Lösung?

16.807 Beiträge seit 2008
vor 9 Jahren

Welche der beiden Varianten hast denn genutzt?

Zur Not machst eben ne eigene Exe, der Du nur den Pfad übergibst und die dann Process.Start() ausführt. Nicht schön aber selten.
Du bist Entwickler - lass Dir was einfallen, was für Dich gut ist 😉

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 9 Jahren

ich verwende nun den folgenden Aufruf:


Process proc = UserAccountControl.CreateProcessAsStandardUser("calc.exe", "");

sobald die beiden Bibliotheken eingebunden sind, steht diese Funktion zur Verfügung.

haha, de mit der eigenen Exe ist, nett aber wie von dir gesagt "unschön".
Währe gerade passend gewesen, wenn man das gleich komfortabel hätte verwenden können. Aber so ist es def. besser als zuvor.

16.807 Beiträge seit 2008
vor 9 Jahren

Ich kenn die Bibliotheken auch nicht auswendig. Das Ding ist ja MsPL lizienziert (=> mach damit was Du willst).
Zieh Dir halt den Quellcode und pass es Dir an.

P
Pioneer17 Themenstarter:in
148 Beiträge seit 2007
vor 9 Jahren

Ist C++, nicht gerade mein "Streckenpferd" 😉

Mal schauen...zur not wirklich mit der eigenen Exe 😄

Danke für die Hilfe!