AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein ShellExecute, Batch über runas starten
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute, Batch über runas starten

Ein Thema von waldforest · begonnen am 26. Apr 2016 · letzter Beitrag vom 12. Sep 2016
Antwort Antwort
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

AW: ShellExecute, Batch über runas starten

  Alt 27. Apr 2016, 14:42
Hmmm,
keine Ahnung warum aber cmd ruft er, auch mit komplettem Pfad nicht auf...
Dennoch Danke ..

Ich glaube ich muss mir unter Win >=7 ne neue Strategie zum Austausch der Dateien ausdenken.
mfg wf
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: ShellExecute, Batch über runas starten

  Alt 27. Apr 2016, 14:47
keine Ahnung warum aber cmd ruft er, auch mit komplettem Pfad nicht auf...
Das kann nicht sein. Warum das so ist, sagt dir ShellExecute mit seinem Rückgabewert.

MfG Dalai
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: ShellExecute, Batch über runas starten

  Alt 28. Apr 2016, 10:45
Hallo,
OK, ich hab's jetzt doch noch mit einigen Anpassungen hinbekommen.
Eine Ursache war, dass ich den Parameter /C im 3 Parameter mit dabei hatte, also PChar('cmd.exe /C') hieß. Shellexecute lief dann mit Error 2 (kann Datei nicht finden) auf Fehler.
Wichtig sind auch die entsprechenden "" weil auf diese Weise die Parameter getrennt werden müssen (Langer Dateiname mit eventuellen Leerzeichen).
Ein weiterer Fehler war, dass beim Aufruf der Batch mit CMD, das aktuelle Verzeichnis auf c:\windows\system32 verweist.
Übergebe hier das richtige Verzeichnis als 2ten CMD-Parameter, könnte man sicher auch in der Batch abfangen ....


Mit anliegendem Aufruf funktioniert es.

Code:
   
Temp_Vz := 'c:\tmp\Update\'

   
ShellExecute(handle, 'runas', PCHAR('cmd.exe'),
                              PCHAR('/C ""'+Temp_Vz+'A_Upd.bat" '+batch_par+' "'+Temp_Vz+'""' ),
                              PCHAR('"'+Temp_Vz+'"'), SW_HIDE);
lässt sich sicher optisch noch verbessern, aber es funktioniert. Nochmals Danke für die Impulse.

ergänzende Info über http://ss64.com/nt/cmd.html
mfg wf

Geändert von waldforest (28. Apr 2016 um 11:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

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

AW: ShellExecute, Batch über runas starten

  Alt 28. Apr 2016, 14:43
Wichtig sind auch die entsprechenden "" weil auf diese Weise die Parameter getrennt werden müssen (Langer Dateiname mit eventuellen Leerzeichen).
Jep.

Zitat:
Ein weiterer Fehler war, dass beim Aufruf der Batch mit CMD, das aktuelle Verzeichnis auf c:\windows\system32 verweist.
ShellExecute hat doch einen entsprechenden Parameter zum Setzen des Arbeitsverzeichnisses, den du im Code im OP doch bereits belegt hast.

Zitat:
Code:
   
Temp_Vz := 'c:\tmp\Update\'

   
ShellExecute(handle, 'runas', PCHAR('cmd.exe'),
                              PCHAR('/C ""'+Temp_Vz+'A_Upd.bat" '+batch_par+' "'+Temp_Vz+'""' ),
                              PCHAR('"'+Temp_Vz+'"'), SW_HIDE);
Ich empfehle dringend, die Funktion (SysUtils.)Delphi-Referenz durchsuchenFormat zu benutzen, sonst blickst du später nicht mehr durch, wenn Fehler auftreten und suchst (vermeintlich) fehlende Anführungszeichen oder sonstiges. Delphi-Referenz durchsuchenAnsiQuotedStr bietet sich hier vielleicht auch an, um Anführungszeichen zu setzen.

MfG Dalai
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: ShellExecute, Batch über runas starten

  Alt 11. Sep 2016, 15:38
Hallo,
ist es möglich shellexecute mit runas und den Profildaten eines Admins als Parameter zu übergeben.

Hintergrund: ich habe einen Rechner, der 2 Benutzerprofile besitzt, eines mit Administrationsrecht, das Andere als klassischer Nutzer.
Nun möchte ich vom Nutzer ohne Adminrechte aus meiner Anwendung, ohne jedes mal den Benutzer und das Passwort eingeben zu müssen, über Shellexecute eine Batch starten. Diese soll mit Adminrechte gestartet werden.

Geht dies überhaupt mit shellexecute oder wie kann ich so etwas realisieren ?
mfg wf

Geändert von waldforest (11. Sep 2016 um 15:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ShellExecute, Batch über runas starten

  Alt 11. Sep 2016, 19:14
Code:
[Win] CMD [Enter] runus [Enter]
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: ShellExecute, Batch über runas starten

  Alt 12. Sep 2016, 06:45
Hallo,
mir schwebt eher der eine Möglichkeit aus meiner Anwendung heraus vor.
Ich habe da Problem wie folgt gelöst.

Delphi-Quellcode:
function RunAsWithLogon(const User, PW, Application, CmdLine: WideString): DWORD;
var
  si : TStartupInfoW;
  pif : TProcessInformation;
  s : WideString;
begin
  ZeroMemory(@si, sizeof(si));
  si.cb := sizeof(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := 1;

  if CmdLine = 'then
    s := Application
  else
    s := Application + ' ' + CmdLine;

  SetLastError(0);
  CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), 0, nil, PWideChar(s), CREATE_DEFAULT_ERROR_MODE, nil,
    nil, @si, @pif);
  Result := GetLastError;
end;
mfg wf
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:46 Uhr.
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