Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi RunAs Dialog vor dem Programmstart??? (https://www.delphipraxis.net/64813-runas-dialog-vor-dem-programmstart.html)

Piro 8. Mär 2006 15:28


RunAs Dialog vor dem Programmstart???
 
Moin,

Ich habe ein Programm, welches die Systemprogramme von Windiws als Sammlung enthält. In unserer Firma sollen nun der Helpdesk dieses Programm mit Adminrechten auf dem jeweiligen UserPC benutzen

Dazu würde ich gerne den RUNAS Dialog verwenden.

Frage:
Ist es möglich ein Programm zu entwickeln, dass: 1. RUNAS DIALOG aufruft, 2. das gleiche Programm mit dem RUNAS Benutzer startet? --> Es soll nur ein Programm sein

Vielen Dank im Voraus.

Christian Seehase 8. Mär 2006 18:28

Re: RunAs Dialog vor dem Programmstart???
 
Moin Daywalker,

das sollte grundsätzlich gehen.
Du müsstest halt prüfen, ob schon eine Instanz des Programms läuft, ist nicht der Fall startet es das Programm noch einmal (der Pfad ist in paramstr(0)), und beendet sich selber.
Läuft schon eine Instanz, ist beim Start nichts mehr zu tun.
Diese Prüfung sollte dann in der DPR stattfinden.
Einige grundsätzliche Beispiele für das Auffinden laufender Instanzen eines Programmes solltest Du hier mit Hier im Forum suchenCreateMutex bzw. Hier im Forum suchenCreateSemaphore finden können.

Piro 8. Mär 2006 22:41

Re: RunAs Dialog vor dem Programmstart???
 
Ich ahbe jetzt das Forum durchwühlt und bin völlig verwirrt.

Kannst du mir mal kurz theoretisch den Aufruf erklären?

Mein Verständnis.

1. Programm startet und checkt ob es schon existiert - Frage: wie kann ich ein Programm ein 2.Mal starten ohne etwas zu tun?
2. Wenn es existiert - Aufruf des RUNAS Dialoges mit anschließendem erneuten Aufruf des Programmes mit Schließung des 1.Programmes

Richtig? Wenn das so ist, habe ich ein Problem, da ich mich noch nicht damit auseinander gesetzt habe. Kennt da einer gute Tutorials?

CodeX 8. Mär 2006 23:01

Re: RunAs Dialog vor dem Programmstart???
 
falls du auf den runas dialog verzichten kannst und einen eigenen dialog erstellen kannst, dann mach folgendes:

1. beim programmstart die rechte prüfen. falls rechte nicht ausreichend, wird der eigene dialog geöffnet.
2. benutzername und passwort vom dialog verwendest du um CreateProcessAsLogon von Luckie aufzurufen.
3. wenn 0 zurückgeliefert wird, hats geklappt und du beendest die aktuelle instanz, da das programm dann ein zweites mal mit den erweiterten rechten gestartet wurde.

uwewo 9. Mär 2006 07:07

Re: RunAs Dialog vor dem Programmstart???
 
Hi,

vielleicht verstehe ich etwas nicht aber...

...normalerweise rechte Maustaste auf das Programm und RunAs auswählen(Englische Version)
...versucht man ein Programm zu installieren und man besitzt keine Rechte öffnet sich
der RunAs Dialog automatisch.

Zumindest in unserer Fa.

Server 2003
Workstations WinXP Prof.

Uwe

kalmi01 9. Mär 2006 07:45

Re: RunAs Dialog vor dem Programmstart???
 
Oder Dein Prog macht selbst eine Abfrage á la

Benutzername:
Passwort:

und versucht sich dann die Berechtigungen zu holen:
Delphi-Quellcode:
var
  AdminToken : Cardinal;

if LogonUser(PAnsiChar(USERNAME),       // UserName
             PAnsiChar(DOMAIN),         // Domäne oder lokaler Rechner
             PAnsiChar(PASSWORD),       // Password
             LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE,
             LOGON32_PROVIDER_DEFAULT,
             AdminToken)
then begin
       if ImpersonateLoggedOnUser(AdminToken)
       then begin
              // hier kommt Dein Prog.-Code hin

              RevertToSelf;             // zurückschalten zum angemeldeten Benutzer
            end;
     end;

MathiasSimmack 9. Mär 2006 08:04

Re: RunAs Dialog vor dem Programmstart???
 
Zitat:

Zitat von uwewo
...versucht man ein Programm zu installieren und man besitzt keine Rechte öffnet sich der RunAs Dialog automatisch.

Das liegt daran, weil Windows (XP und höher, bei 2000 weiß ich es nicht) in dem Fall auf die Dateinamen "setup.exe" und "install.exe" reagiert und den Dialog anzeigt. Diesen Trick kann man sich übrigens zunutze machen. :???:
Es reicht nämlich, unter HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths das eigene Programm mit zwei Werten zu registrieren. Ich habe dort die beiden o.g. Dateinamen gefunden, es mit einem eigenen Programm getestet, und es funktioniert wunderbar. Kleine REG-Datei zum Testen:
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Dateiname.exe]
"RunAsOnNonAdminInstall"=dword:00000001
"BlockOnTSNonInstallMode"=dword:00000001
"Dateiname.exe" ist natürlich durch den gewünschten Dateinamen des eigenen Programmes zu ersetzen. :stupid:


PS: Ich denke, der Wert "RunAsOnNonAdminInstall" dürfte ausreichen (= Ausführen als, bei Nicht-Admin-Installation). Der zweite "BlockOnTSNonInstallMode" bezieht sich, wenn ich raten soll, wohl auf Terminal Server. Was er aber genau bedeutet, weiß ich nicht. :oops:

Piro 9. Mär 2006 16:22

Re: RunAs Dialog vor dem Programmstart???
 
Danke für die zahlreichen Antworten. Wie ich das sehe verzichte ich wohl auf den RUNAS Dialog von Windows, obwohl es gut wäre, denn man bezieht sich gleich auf die vorhanden Users im Active Directory.

@kalmi01:
Dein Programmcode kommt doch in die *.dpr datei oder wie integriere ich dein Codebeispiel?

Gibt es irgendwo ein Tutorial in dem man sieht, wie ein gestartetes Programm sich erneut aufruft und die das zu erst geöffnete Programm schließt?

Danke.

kalmi01 9. Mär 2006 18:26

Re: RunAs Dialog vor dem Programmstart???
 
Hi,

der Code kommt in Deine Main-Unit (z.B. Unit1.pas).
Der Code ruft Dein Prog nicht noch einmal auf, sonder verleiht dem laufenden Prog die gewünschten Benutzerrechte, so als hättest Du es mit RunAs gestartet.

SirThornberry 9. Mär 2006 18:46

Re: RunAs Dialog vor dem Programmstart???
 
ich würde das ganze einfach über parameter machen.
Delphi-Quellcode:
var LStartedWithRunAs: Boolean;
    LCount          : Integer;
begin
  LStartedWithRunAs := False;
  LCount := 1;
  while (LCount <= ParamCount) and not(LStartedWithRunAs) do
  begin
    LStartedWithRunAs := ParamStr(LCount) = 'StartedWithRunAs';
    inc(LCount);
  end;

  if not(LStartedWithRunAs) then
  begin
    //Starten als Dialog hoch bringen
    [...]
  end;
end;
mein Problem wäre dabei jedoch das ich nicht weiß wie man den Dialog "Ausführen als" per Api öffnet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz