Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateProcessAsLogon + Systemtools (https://www.delphipraxis.net/65854-createprocessaslogon-systemtools.html)

Piro 21. Mär 2006 14:13


CreateProcessAsLogon + Systemtools
 
Hi,

ich habe 2 kleine Frage. Irgendwie schaffe ich es nicht ganz.

Ich rufe mit anderen UserRechten das Control Panel auf bzw. die Services auf. Die Umsetzung mit den UserRechten ist OK bloß der Syntax für den Aufruf stimmt nicht ganz.

Wie realisiere ich:

1. Control Panel mit Software Eigenschaften:
Delphi-Quellcode:
procedure Tfrm_main.btn_softwareClick(Sender: TObject);
var
 app, param : string;
begin
 app := PJSysInfo1.SystemFolder+'\control.exe';
 param := 'appwiz.cpl';
 If not CreateProcessAsLogon(frm_login.edt_username.Text,frm_login.edt_password.Text,frm_login.cb_domain.Text, app, param) then
   RaiseLastOSError;
end;
geht nur bis in die Control Panel Ansicht und nicht weiter

2. Aufruf *.MSC Dateien mit CreateProcessAsLogon
Delphi-Quellcode:
procedure Tfrm_main.btn_computermmClick(Sender: TObject);
var
 app, param : string;
begin
 app := PJSysInfo1.SystemFolder+'\Compmgmt.msc';
 param := '';
 If not CreateProcessAsLogon(frm_login.edt_username.Text,frm_login.edt_password.Text,frm_login.cb_domain.Text, app, param) then
   RaiseLastOSError;
end;
Bring SystemFehlermeldung: System ERROR Code:193

CreateProcessAsLogon Function:
Delphi-Quellcode:
function CreateProcessAsLogon(const User, PW, Domain, Application, CmdLine: WideString):
  Boolean;
var
  si          : TStartupInfoW;
  pif         : TProcessInformation;
begin
  ZeroMemory(@si, sizeof(TStartupInfo));
  si.cb := SizeOf(TStartupInfoW);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := 1;
  Result := CreateProcessWithLogonW(PWideChar(User), PWideChar(Domain), PWideChar(PW),
    LOGON_WITH_PROFILE, PWideChar(Application), PWideChar(CmdLine),
    CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
end;
Wo liegt denn der Fehler? ich hoffe mir kann einer helfen. Danke

Dezipaitor 21. Mär 2006 22:33

Re: CreateProcessAsLogon + Systemtools
 
1. normal startet man das Softwarepanel direkt so
RunDll32.exe Shell32.dll,Control_RunDLL Appwiz.cpl,,0

2. probier es mal so:
mmc.exe /s compmgmt.msc


Darf ich mal fragen, was genau du da programmierst?

Wenn es das ist was ich denke, dann machen wir dasselbe.
In diesem Fall sollten wir uns mal "zusammensetzen".

Dezipaitor 24. Mär 2006 14:11

Re: CreateProcessAsLogon + Systemtools
 
hat dir meine Antwort etwas gebracht?

Piro 25. Mär 2006 08:45

Re: CreateProcessAsLogon + Systemtools
 
Hi,

sorry für meine verspätete Antwort. Habe gerade kein Internet zu Hause, nur in der Firma.

Es hat mir etwas gebracht. Die Tipps waren gut.

Mein Tool soll ein AdminTool unter WinXP werden. Da unsere Admins auf die Clients müssen, welche keine lokalen AdminRechte mehr haben. Mit diesem Tool will ich das ständige lästige RunAS umgehen.

Ein Problem habe ich immer noch. Wenn du den Explorer mit AdminRechten öffnest, bringt dir das gar nichts weil die Programme, die dann aufrufen willst wieder als normaler User ohne Rechte ausgeführt werden.

Idee?

Was für ein Tool baust du denn?

Dezipaitor 25. Mär 2006 10:55

Re: CreateProcessAsLogon + Systemtools
 
ja du musst dich in jeden PC als Administrator einloggen,
einen Explorer öffnen und im Menü Extras - Ordneroptionen
im Reiter Ansicht
den Punkt mit "Ordnerfenster in einem eigenen Prozess starten" anwählen.

Nur mit dieser Einstellung kann man den Explorer als Admin starten.

Piro 25. Mär 2006 11:11

Re: CreateProcessAsLogon + Systemtools
 
Ja das ist richtig aber auch lästig. Weiß noch nicht wie ich das automatisiere und im Hintergrund setze. Habe die richtige Stelle noch nicht gefunden.

Trotzdem, wenn du den Explorer mit Adminrechten startest, werden die zu installierende Programm nicht mit Adminrechten gestartet. Und das ist unpraktisch. Denn dann kann ich mir diese Console ersparen und glaich auf die Datei ein RUNAS machen.

Dezipaitor 25. Mär 2006 12:32

Re: CreateProcessAsLogon + Systemtools
 
Zitat:

Zitat von daywalker299
Ja das ist richtig aber auch lästig. Weiß noch nicht wie ich das automatisiere und im Hintergrund setze. Habe die richtige Stelle noch nicht gefunden.

Du meinst, wo diese Einstellung mit "Ordnerfenster als eigener Prozess starten" in der Registrierung versteckt ist?
Also der ist dort:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\Advanced\SeparateProcess
Jedoch musst du den HKEY_CURRENT_USER-Zweig für den Admin verwenden!

Zitat:

Trotzdem, wenn du den Explorer mit Adminrechten startest, werden die zu installierende Programm nicht mit Adminrechten gestartet. Und das ist unpraktisch. Denn dann kann ich mir diese Console ersparen und glaich auf die Datei ein RUNAS machen.

Doch werden sie. Ich mache das schon seit langem so. Es gibt einige Programme, die können dir sagen, unter welchem Benutzer ein Programm läuft. Vermutlich liegt es an der obigen Einstellung.
Ich habe mein Adminaccount mit Sounds versehen, so dass ich hören kann, wenn ich in einem AdminExplorer arbeite. Das wechseln eines Ordners klickt dann immer hörbar.

Als Ausweg kannst du ja Speedcommander oder TotalCommander als Admin starten. Diese sind wie der Explorer nur besser :)


Hier ist ein Überblick was ich gemacht habe

Piro 27. Mär 2006 13:04

Re: CreateProcessAsLogon + Systemtools
 
Nettes Tool bastels di da. Also es funktioniert jetzt bei mir. Am Anfang jedes Einloggen setze ich den Paramter für den SeparatenProzess.

Ich habe nur noch ein paar kleine Probleme. Wenn ich das Control Panel öffne, erscheint nur der Explorer. Warum? Siehe Function:
Delphi-Quellcode:
function CreateProcessAsLogon(const User, PW, Domain, Application, CmdLine: WideString):
  Boolean;
var
  si          : TStartupInfoW;
  pif         : TProcessInformation;
begin
  ZeroMemory(@si, sizeof(si));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := 1;

  SetLastError(0);
  {Wenn der CmdLine Parameter mit der Application verwendet wird, denn
   Application Parameter auf nil setzen und die Applicationn mit dem Parameter im 2.
   Parameter zusammenbauen}

  Result := CreateProcessWithLogonW(PWideChar(User), PWideChar(Domain), PWideChar(PW),
  {LOGON_WITH_PROFILE or LOGON_NETCREDENTIALS_ONLY}
  LOGON_WITH_PROFILE, nil, PWideChar(Application +' '+CmdLine),
  CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif);
end;
...
procedure Tfrm_main.cmd_controlpanelClick(Sender: TObject);
var
 app, param : string;
begin
 app := PJSysInfo1.SystemFolder+'\rundll32.exe';
 param := 'shell32.dll,Control_RunDLL';
 If not CreateProcessAsLogon(frm_login.edt_username.Text,frm_login.edt_password.Text,frm_login.cb_domain.Text, app, param) then
   RaiseLastOSError;
end;
Bei diesem Aufruf erscheint nur der Explorer. Das Ganze passiert auch mit den Netzwerkeinstellungen.

Dezipaitor 27. Mär 2006 17:50

Re: CreateProcessAsLogon + Systemtools
 
so

param := 'shell32.dll,Control_RunDLL Appwiz.cpl,,0';

?

Piro 28. Mär 2006 08:56

Re: CreateProcessAsLogon + Systemtools
 
Danke aber dem Parameter öffne ich die Software Settings. Ich brauche aber das Control Panel und die Netzwerk Settings.

Control Panel:
Delphi-Quellcode:
app := PJSysInfo1.SystemFolder+'\rundll32.exe';
param := 'shell32.dll,Control_RunDLL';
...
NetzwerkSettings:
Delphi-Quellcode:
app := PJSysInfo1.SystemFolder+'\rundll32.exe';
param := 'shell32.dll,Control_RunDLL ncpa.cpl';
...
Unter Windows 2000 Professional funktioniert das alles aber nicht unter WinXP. Warum?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.
Seite 1 von 2  1 2      

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