AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kommandozeile aus Programm

Ein Thema von lukdelphias · begonnen am 23. Jul 2020 · letzter Beitrag vom 24. Jul 2020
Antwort Antwort
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#1

Kommandozeile aus Programm

  Alt 23. Jul 2020, 11:04
Hallo liebes Forum,

ich möchte in einem Delphiprogramm folgendes in der Kommandozeile aufrufen:
Code:
cmdkey /add:server7 /user:domäne\user /pass:"passwort"
Allerdings möchte ich dafür keine Batch schreiben und dann diese Aufrufen. Es soll wirklich hart in den Quellcode geschrieben werden, dass er die Kommandozeile ausführen soll mit dem oben geschriebenen "Parametern".

Wie funktioniert sowas?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 11:14
Suche mal hier in der DP nach Hier im Forum suchenshellexecute.
Da dürften genügend Treffer mit Beispielen kommen.
Peter
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 11:43
ShellExecute hab ich schon in 1000 verschiedenen Varianten probiert bis jetzt hat noch nichts funktioniert...
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.896 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 12:07
Oder schau Dir DosCommand an, gibts glaube ich auch per GetIt.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 12:09
ShellExecute hab ich schon in 1000 verschiedenen Varianten probiert bis jetzt hat noch nichts funktioniert...
Zeig mir eine!
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

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

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 12:09
ShellExecute hab ich schon in 1000 verschiedenen Varianten probiert bis jetzt hat noch nichts funktioniert...
Heißt genau was? Code funktioniert nicht? Wird der Befehl nicht ausgeführt? Wenn letzteres: Hast du den Rückgabewert von ShellExecute ausgewertet? Was sagt dieser? Der Debugger kann ggf. auch helfen.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 12:10
Schon mal so probiert?

Delphi-Quellcode:
Programm := 'cmdkey';
Parameter := /add:server7 /user:domäne\user /pass:"passwort";
Shellexecute(Handle, 'open', PChar(Programm), PChar(Parameter), nil, SW_SHOW);
Wenn ja, was passiert (nicht)?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.882 Beiträge
 
Delphi 12 Athens
 
#8

AW: Kommandozeile aus Programm

  Alt 23. Jul 2020, 12:18
Ich Benutze diese Funktion zum Installieren von Diensten
Die Funktion wartet darauf das die Anwendung zurückkehrt.
Wenn du das nicht willst musste das ausbauen.
Die bedingte Compilierung je nach Framework evtl auch ausbauen.
Delphi-Quellcode:
Procedure TKannDiensteKram.SetInstalledAsService(aValue : Boolean);
Begin
  if aValue <> GetInstalledAsService then
  Begin
    if aValue then
    Begin
      ExecAndWait(ServiceExe, '/install /silent', 60000, SW_SHOWNORMAL, true);
    end
    else
    Begin
      ExecAndWait(ServiceExe, '/uninstall /silent', 60000, SW_SHOWNORMAL, true);
    End;
  End;
End;

function TKannDiensteKram.ExecAndWait(Filename, Params: string; TimeOut:int64=-1 ; WindowState: word = SW_SHOWNORMAL; elevated:Boolean = false): boolean;
var
  ShExecInfo: SHELLEXECUTEINFO;
  started,h_res : Cardinal;
  const
  SEE_MASK_NOASYNC= $100;
begin
  Result := false;
  if Filename = 'then
    exit;
  if not FileExists(FileName) then
  Begin
    {$IFDEF FrameWork_VCL}
    ShowMessage('Datei nicht existent!');
    {$ENDIF}
    {$IFDEF FrameWork_FMX}
    TDialogService.ShowMessage('Datei nicht existent!');
    {$ENDIF}
    Exit;
  End;
  ZeroMemory(@ShExecInfo, SizeOf(ShExecInfo));
  ShExecInfo.Wnd := 0;
  ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOASYNC;
  if elevated then
    ShExecInfo.lpVerb := 'runas'
  else
    ShExecInfo.lpVerb := 'open'; //'run as' statt 'open' ist für Systeme ab Vista evtl. besser
  ShExecInfo.lpFile := PChar(Filename);
  ShExecInfo.lpParameters := PChar(Params);
  ShExecInfo.lpDirectory := PChar(ExtractFileDir(Filename));
  ShExecInfo.nShow := WindowState;
  Result := ShellExecuteEx(@ShExecInfo);
  if Result then
  begin
    started := Gettickcount;
    repeat
      h_res := MsgWaitForMultipleObjects(1, ShExecInfo.hProcess, False, TimeOut, QS_ALLINPUT);
      if h_res <> WAIT_OBJECT_0 then
        Application.ProcessMessages;
    until (h_res = WAIT_OBJECT_0) or ( (Timeout >-1) and ( Started + TimeOut < GetTickCount )) ;
    if (timeout > -1) then
      Result := not( Started + TimeOut < GetTickCount );
    CloseHandle(ShExecInfo.hProcess);
  end
  else
    {$IFDEF FrameWork_VCL}
    Showmessage('Fehler beim Installieren des Dienstes:' + Filename +
                 #13#10'System Fehler: ' + SysErrorMessage(GetLastError));
    {$ENDIF}
    {$IFDEF FrameWork_FMX}
    TDialogService.Showmessage('Fehler beim Installieren des Dienstes:' + Filename +
                 #13#10'System Fehler: ' + SysErrorMessage(GetLastError));
    {$ENDIF}

End;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
lukdelphias

Registriert seit: 23. Jun 2020
50 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Kommandozeile aus Programm

  Alt 24. Jul 2020, 06:58
Allllso, gestern nochmal ein Stück probiert und der Fehler ist mir aufgefallen.
Ich habe bis jetzt immer über ShellExecute versucht das Programm
Code:
cmd.exe
mit den Parametern
Code:
cmdkey /add:server3 ....
aufzurufen.
Gestern ist mir dann aufgefallen das es ja auch die
Code:
cmdkey.exe
gibt.
Also neuer Versuch mit ShellExecute das Programm
Code:
cmdkey.exe
mit den Parametern
Code:
/add:server3 ....
aufzurufen.
Und siehe da es klappt. Stand anscheinend ganz schön auf den Schlauch. Trotzdem natürlich Danke für die Antworten.

Gruß
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:22 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