![]() |
Re: Sich selbst neu starten?
Hab es nicht weiter getestet aber vielleicht funktioniert folgendes:
Delphi-Quellcode:
Dann einfach via CreateProcess oder auch ShellExecute das Programm neu starten.
program Project1;
uses Forms, Windows, Sysutils, Messages, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} var hMutex: Cardinal; aHWND: THandle; begin hMutex:= CreateMutex(nil, True, PChar(ExtractFilename(ParamStr(0)))); if GetLastError() = ERROR_ALREADY_EXISTS then begin aHWND:= FindWindow(nil, PChar('Form1')); if ParamStr(1) = '-r' then begin //vielleicht doch erst überprüfen ob das Programm neu getartet werden darf. //könnte sonst unerwünschte Nebenwirkungen geben.... if aHWND <> 0 then begin SendMessage(aHWND, WM_CLOSE, 0, 0); Sleep(1000); end; end else begin MessageBox(0, PChar('Programm läuft bereits.'), PChar(ExtractFilename(ParamStr(0))), mb_OK); Halt; end; end; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; if hMutex <> 0 then begin ReleaseMutex(hMutex); CloseHandle(hMutex); end; end. |
Re: Sich selbst neu starten?
Eine weitere Möglichkeit wäre diese:
Delphi-Quellcode:
procedure RestartApplication;
function GetTmpDir: String; var PC: PChar; begin PC := StrAlloc(MAX_PATH + 1); GetTempPath(MAX_PATH, PC); Result := String(PC); StrDispose(PC); end; function GetTmpFileName(Ext: String): String; var PC: PChar; begin PC := StrAlloc(MAX_PATH + 1); GetTempFileName(PChar(GetTmpDir), 'uis', 0, PC); Result := string(PC); Result := ChangeFileExt(Result, Ext); StrDispose(PC); end; var BatchFile: TStringList; BatchName: String; begin batchname := GetTmpFileName('.bat'); FileSetAttr(ParamStr(0), 0); BatchFile := TStringList.Create; with BatchFile do begin try Add(':Label1'); Add(Copy(ParamStr(0), 0, 2)); Add('cd ' + Copy(ExtractFilePath(ParamStr(0)), 4, Length(ExtractFilePath(ParamStr(0))) -1)); Add('start ' + ExtractFileName(ParamStr(0))); Add('del ' + BatchName); SaveToFile(BatchName); ChDir(GetTmpDir); WinExec(PChar(BatchName), SW_HIDE); finally BatchFile.Free; end; Halt; end; Application.Terminate; end; |
Re: Sich selbst neu starten?
Wie marabu schon andeutete mit dem Link, n Mutex und Ruhe ist im Laden :mrgreen:
|
AW: Re: Sich selbst neu starten?
Zitat:
|
AW: Re: Sich selbst neu starten?
Zitat:
Das ist nicht der Code sonder ein Virus den es in Delphi gibt such mal hier im Forum das steht das. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz