AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RunAs unter Win7 (ohne UAC)

Ein Thema von Dalai · begonnen am 15. Mär 2012 · letzter Beitrag vom 18. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

RunAs unter Win7 (ohne UAC)

  Alt 15. Mär 2012, 22:11
Hey,

ich benutze in einem meiner Programme die Funktion ShellExecuteEx mit dem Verb runas, um den Dialog "Ausführen als" zu öffnen. Das funktioniert unter Win2k und XP einwandfrei. Unter Win7 wird dieser offensichtlich an die UAC weitergegeben. Das kann ich natürlich nicht gebrauchen, denn der Nutzer soll in der Lage sein, den Nutzer selbst zu wählen. Außerdem kommt hinzu, dass der Aufruf ins Leere läuft, wenn die UAC abgeschaltet ist.

Kurz: Ich suche eine Möglichkeit, den gewohnten "Ausführen als"-Dialog auch unter Win7 zu zeigen. Ich weiß, dass es ihn noch* gibt (siehe Bild), aber es war mir bisher nicht möglich, herauszufinden, welche API-Funktion dafür zuständig ist. Alle Suchergebnisse drehen sich nur um UAC und "elevated execution" und so Kram.

Kann mich jemand erhellen?

MfG Dalai

* oder evtl. auch wieder, denn irgendwo habe ich gelesen, dass Vista die Möglichkeit "Ausführen als" komplett fehlt.
Angehängte Grafiken
Dateityp: png RunAs_Win7.png (16,0 KB, 49x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.895 Beiträge
 
Delphi 12 Athens
 
#2

AW: RunAs unter Win7 (ohne UAC)

  Alt 15. Mär 2012, 23:32
Wie wäre es mit runasuser als Verb?
(Wusste ich auch nicht, habs grad kurz ausprobiert und ging. )
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: RunAs unter Win7 (ohne UAC)

  Alt 15. Mär 2012, 23:49
Ich hab mal vor einiger Zeit darüber in About.com Delphi gelesen. Habe mal kurz deren Suche bemüht, vielleicht hilft es:

http://delphi.about.com/od/delphitip...on-startup.htm
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#4

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 00:14
Wie wäre es mit runasuser als Verb?
WTF? Darauf wäre ich nie gekommen! Liegt wohl daran, dass die Dokumentation von MS so überaus vollständig ist ... In der Doku Datenstruktur SHELLEXECUTEINFO ist selbst das seit Win2k funktionierende Verb runas nicht zu finden .

Zitat:
(Wusste ich auch nicht, habs grad kurz ausprobiert und ging. )
In der Tat funktioniert das. Danke! Es hat aber einen dicken Nebeneffekt, der es für den Anwendungszweck unbrauchbar macht: die Funktion ShellExecuteEx kommt sofort zurück im Gegensatz zum Verb runas. Beendet man das Programm danach, ist natürlich auch der Dialog weg... Ich habe folgende Flags probiert: SEE_MASK_NOASYNC, SEE_MASK_WAITFORINPUTIDLE und SEE_MASK_NOCLOSEPROCESS. Keiner davon hilft, die Funktion am Rückkehren zu hindern. Ideen?

Zitat von Popov:
Ich hab mal vor einiger Zeit darüber in About.com Delphi gelesen. Habe mal kurz deren Suche bemüht, vielleicht hilft es:
Ein Manifest hat mein Programm bereits mit einem requestedExecutionLevel von "asInvoker", weil es sonst immer die UAC auslöst, wie man in diesem Thema nachlesen kann. Ich möchte aber nur bei Bedarf umschalten und dazu den Nutzer vorher befragen (ohne selbst einen Dialog zu schreiben).

MfG Dalai

Geändert von Dalai (16. Mär 2012 um 01:10 Uhr) Grund: Linktext von ShellExecuteEx auf SHELLEXECUTEINFO geändert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.336 Beiträge
 
Delphi 12 Athens
 
#5

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 00:30
Es gibt nicht nur ShellExecute/ShellExecuteEx oder das uralte WinExec ( ), sondern auch noch CreateProcess.

Zu Letzerem würde ich mal empfehlen ganz genau im MSDN nachzulesen und vorallem auch den Links zu folgen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Mär 2012 um 00:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#6

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 00:53
Die Existenz der Funktion CreateProcessWithLogonW ist mir bekannt. Ich schrieb aber nicht ohne Grund, dass ich mir die Arbeit sparen will, den Nutzer selbst nach einem alternativen Logon zu fragen. Denn wozu das Rad mehrfach erfinden, wenn es die Funktionalität eh schon gibt? Von dem deutlichen Mehraufwand der Ermittlung eines Tokens (bei CreateProcessAsUser) usw. usf. mal abgesehen.

Falls du auf andere Funktionen anspielst, wäre ich dir dankbar, wenn du etwas konkreter wärst.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.895 Beiträge
 
Delphi 12 Athens
 
#7

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 08:25
Keiner davon hilft, die Funktion am Rückkehren zu hindern. Ideen?
Hmm, das könnte daran liegen, dass du nur noch den Start anstößt und der eigentliche Start irgendwo anders im Benutzerkontext passiert, an den du nicht herankommst ohne Adminrechte. Aber das muss ich erst untersuchen. Dazu komme ich vielleicht am Wochenende.

Du könntest aber als Umgehung deine eigene Anwendung mit diesen Privilegien und einem passenden Parameter starten. Wenn die Anwendung beim Start diesen Parameter findet, startet sie das eigentliche Programm, wartet und sagt dir bei Beendigung Bescheid (Windows Message, Pipe, ...).
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#8

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 13:09
Hmm, das könnte daran liegen, dass du nur noch den Start anstößt und der eigentliche Start irgendwo anders im Benutzerkontext passiert, an den du nicht herankommst ohne Adminrechte.
Nein, so weit kommt es gar nicht. Nach Ende der Funktion ShellExecuteEx rufe ich die Funktion ShowMessage auf, um mir etwas anzeigen zu lassen. Die Meldung kommt schon, während der "Ausführen als"-Dialog noch lädt (ist n bissel langsamer wegen virtueller Maschine).

Zitat:
Du könntest aber als Umgehung deine eigene Anwendung mit diesen Privilegien und einem passenden Parameter starten.
Genau das ist das Ziel. Das eigene Programm mit anderem Nutzer starten. Es geht nicht um irgendein anderes Programm.

Ich werd mir das nachher mal in einer anderen Programmiersprache anschauen, um auszuschließen, dass es am Delphi 5 liegt.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.895 Beiträge
 
Delphi 12 Athens
 
#9

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 13:30
Und warum wartest du dann über das Handle anstatt schlicht via IPC der ersten Instanz Bescheid zu sagen?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#10

AW: RunAs unter Win7 (ohne UAC)

  Alt 16. Mär 2012, 23:14
Mmh, ich habe jetzt drei funktionierende Methoden ausmachen können, weiß aber nicht so recht, welche davon man benutzen sollte.
  • Fenster finden und Nachricht zum Schließen senden (falls der Parameter 'runas' übergeben wurde)
    Delphi-Quellcode:
    hWindow:= FindWindow('TMainForm', PChar(sApplicationTitle));
    if hWindow > 0 then
        SendMessage(hWindow, WM_CLOSE, 0, 0);
  • Bestimmte Nachricht registrieren und darauf reagieren
    RunAsUserMsg:= RegisterWindowMessage('RunAsUser'); und falls der Parameter 'runas' angegeben wurde, wird die Nachricht gesendet:
    SendMessage(HWND_BROADCAST, RunAsUserMsg, 0, 0); Die Nachrichtenverarbeitungsroutine ist dann diese:
    Delphi-Quellcode:
    procedure TMainForm.WndProc(var Msg: TMessage);
    begin
        if Msg.Msg = RunAsUserMsg then
            Self.Close;
        inherited;
    end;
  • Ähnlich wie Variante 1: Handle der ersten Instanz an die zweite übergeben (statt es zu suchen) und Nachricht zum Schließen senden.
Es gibt sicher noch andere Varianten, aber ich denke, das sind die einfachsten. Aber welche ist zu bevorzugen bzw. von welcher/welchen sollte man besser Abstand nehmen?

MfG Dalai
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz