Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm funktioniert nur unter XP (https://www.delphipraxis.net/60051-programm-funktioniert-nur-unter-xp.html)

Ati 2. Jan 2006 12:08


Programm funktioniert nur unter XP
 
Hallo zusammen,

meine WE-Anforderung liegt in den allerletzten Zügen. In meiner Access-Version hatte ich beim speichern noch eine Batchdatei ausführen lassen, damit diverse WE-Anforderungen nicht "Rückdatiert" werden können. Ich habe dann hier und bei Swissdelphicenter eine hübschen Code gefunden, der die Batchdatei ausführt und wartet bis diese beendet ist. Es kann nur mit dem Ausführbefehl zu tun haben, das mein Programm unter XP einwandfrei funktioniert und W98-Kisten gar nichts mehr machen. hier mal der C&P-Code :oops:
Delphi-Quellcode:
procedure ShellExecute_AndWait(FileName: string; Params: string);
var
  exInfo: TShellExecuteInfo;
  Ph: DWORD;
begin
  FillChar(exInfo, SizeOf(exInfo), 0);
  with exInfo do
  begin
    cbSize := SizeOf(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := GetActiveWindow();
    ExInfo.lpVerb := 'open';
    ExInfo.lpParameters := PChar(Params);
    lpFile := PChar(FileName);
    nShow := SW_Hide;
  end;
  if ShellExecuteEx(@exInfo) then
    Ph := exInfo.HProcess
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Exit;
  end;
  while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
    Application.ProcessMessages;
  CloseHandle(Ph);
end;
Hier der Aufruf:
Delphi-Quellcode:
Procedure TForm1.dssave;
var datum:TDate;
    zeit:TTime;
Begin
  shellexecute_Andwait('W:\fohrer\nettime.bat','');
Hatte hier mal was von einem Schalter /C gelesen konnte ihn aber irgendwie nicht anwenden.

Danke Ati

chaosben 2. Jan 2006 12:29

Re: Programm funktioniert nur unter XP
 
Es könnte an dem fehlenden /c liegen.
Die /c-Option sagt dem Kommandointerpreter, das er das folgende Kommando ausführen und dann enden soll.
Du müsstest also etwa folgendes ausführen:
Code:
cmd /c c:\meinebat.bat
In deinem Fall solltest du dir aber vorher noch den Wert der Umgebungsvariable "ComSpec" holen, damit du unter Win98 die "command.com" anstatt der "cmd.exe" ausführst.

Ati 2. Jan 2006 12:56

Re: Programm funktioniert nur unter XP
 
TOLL!!!!!!!!!!!!!!!!
Ich hab nicht ein Wort verstanden.

Vjay 2. Jan 2006 13:04

Re: Programm funktioniert nur unter XP
 
Und was genau daran nicht?

Ati 2. Jan 2006 13:23

Re: Programm funktioniert nur unter XP
 
Also. "cmd" geht wie wir ja alle wissen nicht unter W98. Ich muß jetzt also das Kunststück hinbekommen einen "universellen" Code zu basteln. Das mit ComSpec habe ich in diesem Zusammenhang nicht verstanden. Ich könnte natürlich die Batch-Datei ganz normal ausführen, dann 2 Sekunden das programm anhalten und dann normal weitermachen. Nur finde ich so eine Lösung stümperhaft. Und davon habe ich in der Vergangenheit genug fabriziert.

Aenogym 2. Jan 2006 13:34

Re: Programm funktioniert nur unter XP
 
Zitat:

Zitat von Ati
Also. "cmd" geht wie wir ja alle wissen nicht unter W98. Ich muß jetzt also das Kunststück hinbekommen einen "universellen" Code zu basteln. Das mit ComSpec habe ich in diesem Zusammenhang nicht verstanden. Ich könnte natürlich die Batch-Datei ganz normal ausführen, dann 2 Sekunden das programm anhalten und dann normal weitermachen. Nur finde ich so eine Lösung stümperhaft. Und davon habe ich in der Vergangenheit genug fabriziert.

hol dir einfach die umgebungsvariable "ComSpec" auslesen (wie man umgebungsvariablen ausliest, findest du AFAIR in der CodeLib).
in dieser variable steht der kommandozeileninterpreter (eben command.com oder cmd.exe). diesen dann einfach mit besagten argumenten aufrufen und gut is'. ;)

aeno

ringli 2. Jan 2006 13:35

Re: Programm funktioniert nur unter XP
 
Durch das Abfragen der ComSpec-Umgebungsvariable erhältst du den kompletten Pfad zum aktuellen Kommandointerpreter. Unter den NT-Systemen ist dies normalerweise die CMD.exe und unter den 9x-System die COMMAND.com.

Also sähe das Ergebnis unter NT-Systemen etwa so aus:
Code:
C:\WINDOWS\system32\cmd.exe
Und unter den 9x-Systemen vielleicht so:
Code:
C:\WINDOWS\command.com

Ati 2. Jan 2006 14:00

Re: Programm funktioniert nur unter XP
 
Habe jetzt mal versucht folgenden Befehl zu testen:
Delphi-Quellcode:
   ShellExecute(Application.Handle, 'open', PChar(SysUtils.GetEnvironmentVariable('COMSPEC')),
PChar('/C W:\Fohrer\nettime.bat'), nil, SW_ShowNormal);
Meldung: undefinierter Bezeichner "GetEnvironmentVariable".

SysUtils und ShellApi sind in uses aber aufgenommen.

Ati 2. Jan 2006 14:52

Re: Programm funktioniert nur unter XP
 
Hmh. Anscheinend weiß auch kein anderer warum das so nicht funktioniert. Habe ich den sonst noch irgendwie die Möglichkeit den Befehl "net time \\server /set /yes" auszuführen.

Luckie 2. Jan 2006 14:55

Re: Programm funktioniert nur unter XP
 
Geht bei mir wunderbar:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := SysUtils.GetEnvironmentVariable('COMSPEC');
  ShowMessage(s);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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