Erstmal: Man kann dein Programm nicht verschieben und auch nicht schließen. Dann: stopp doch den Timer, wenn die Laufwerke nicht gefunden wurden, die ständigen Fehlermeldungen nerven.
Und warum muß PVMonitor im Root von C:\ liegen? Mit ParamStr(0) bekommest du deinen Programmpfad und -name. Und das:
PChar('D:\Windows\System32\cmd.exe'),
Sollte bei einem Rechner Windows nicht auf d:\ installiert sein, wie bei mir, geht es nicht. Es gibt aber die Funktion GetWindowsDirectory und sogar GetSystemDirectory.
Was hast du hier eigentlich für komische Blöcke gesetzt:
Delphi-Quellcode:
begin
regist := TRegistry.Create;
regist.RootKey := HKEY_CURRENT_USER;
regist.OpenKey('Software\SystemMonitor\Setup', true);
Form2.Edit1.text := regist.ReadString('Pfad1');
Form2.Edit2.text := regist.ReadString('Pfad2');
Form2.Edit3.text := regist.ReadString('Pfad3');
regist.free;
end;
// Zeit mit BMS abgleichen
begin
ShellExecute(0,
nil,
PChar('D:\Windows\System32\cmd.exe'),
Pchar('/c net time \\Master_BMSServer /set /yes'),
Pchar(''),
SW_Hide);
end;
// PVD Monitor Starten
begin
ShellExecute(0,
nil,
PChar('c:\PVDMonitor.exe'),
Pchar(''),
Pchar(''),
SW_Normal);
end;
So sähe das bei mir aus:
Delphi-Quellcode:
regist := TRegistry.Create;
if Assigned(regist) then
begin
try
regist.RootKey := HKEY_CURRENT_USER;
if regist.OpenKey('Software\SystemMonitor\Setup', False) then
begin
Form2.Edit1.text := regist.ReadString('Pfad1');
Form2.Edit2.text := regist.ReadString('Pfad2');
Form2.Edit3.text := regist.ReadString('Pfad3');
regist.CloseKey();
end;
finally
regist.free;
end;
end;
// Zeit mit BMS abgleichen
ShellExecute(0, nil, PChar('D:\Windows\System32\cmd.exe'),
Pchar('/c net time \\Master_BMSServer /set /yes'), nil, SW_Hide);
// PVD Monitor Starten
ShellExecute(0, nil, PChar('c:\PVDMonitor.exe'), nil, nil, SW_Normal);
Beachte auch den Ressourcenschutzblock um das Registry-Objekt. Und da du nur lesen willst, öffne den Pfad mit False, sonst legst du ihn nämlcih immer an, wenn er nicht vorhanden ist und das ist Blödsinn, da du ja nur lesen willst.
Was meldest du hier als Service an:
Delphi-Quellcode:
//Als Service anmelden
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
Du unterdrückst nur den Taskbareintrag.
Und allgemein: Formatier deinen Quellcode gescheit. Siehe dazu auch hier:
http://www.luckie-online.de/artikel/opstyleguide.shtml
Zu deinem Problem: Wo ist da ein Problem? Schreib die Informationen in die Registry und lies sie wieder aus.