123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- {*
- * Updates DMDirc windows components
- *
- * DMDirc - Open Source IRC Client
- * Copyright (c) 2006-2010 Chris Smith, Shane Mc Cormack, Gregory Holmes,
- * Michael Nixon
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *}
- program DMDircUpdater;
- {$MODE Delphi}
- {$APPTYPE GUI}
-
- {$R UAC.rc}
-
- uses Vista, shared, Windows, SysUtils, classes, StrUtils;
- procedure InitCommonControls; stdcall; External 'comctl32.dll' name 'InitCommonControls';
- { ---------------------------------------------------------------------------- }
-
- { ----------------------------------------------------------------------------
- MAIN PROGRAM
- ---------------------------------------------------------------------------- }
- var
- sourceDir: String = '';
- thisDir: String;
- cliParams: String = '';
- i: integer;
- jarName: String;
- launcherUpdate: boolean = false;
- myName: String;
- canDoMore: boolean = true;
- begin
- InitCommonControls;
-
- myName := ExtractFileName(paramstr(0));
- thisDir := ExtractFileDir(paramstr(0));
- jarName := thisDir+'\DMDirc.jar';
-
- if ParamCount > 0 then begin
- for i := 1 to ParamCount do begin
- if AnsiContainsStr(cliParams, ' ') then cliParams := cliParams+' "'+paramstr(i)+'"'
- else cliParams := cliParams+' '+paramstr(i);
- if (paramstr(i) = '--UpdateSourceDir') then begin // Source Directory
- if ParamCount > i then begin
- sourceDir := paramstr(i+1);
- end;
- end
- end;
-
- // Look for a launcher update.
- if FileExists(pchar(sourceDir+'\.DMDirc.exe')) and FileExists(pchar(sourceDir+'\.DMDircUpdater.exe')) then begin
- if myName = 'DMDircUpdater.exe' then begin
- // Windows won't let us overwrite ourself, so we need to copy ourself
- // to another name, and run the new us.
- if CopyFile(pchar(thisDir+'\DMDircUpdater.exe'), pchar(thisDir+'\DMDircLauncherUpdater.exe'), False) then begin
- canDoMore := false;
- Launch('"'+thisDir+'\DMDircLauncherUpdater.exe" '+cliParams);
- end
- else begin
- showmessage('Unable to overwrite launcher', 'DMDirc', 'Update Failed');
- end;
- end
- else begin
- launcherUpdate := true;
- if FileExists(pchar(thisDir+'\DMDirc.exe')) then begin
- if not DeleteFile(pchar(thisDir+'\DMDirc.exe')) then begin
- showmessage('Unable to delete DMDirc.exe', 'DMDirc', 'Launcher Update Failed');
- end;
- end;
-
- if not FileExists(pchar(thisDir+'\DMDirc.exe')) and MoveFile(pchar(sourceDir+'\.DMDirc.exe'), pchar(thisDir+'\DMDirc.exe')) then begin
- if FileExists(pchar(thisDir+'\DMDircUpdater.exe')) then begin
- if not DeleteFile(pchar(thisDir+'\DMDircUpdater.exe')) then begin
- showmessage('Unable to delete DMDircUpdater.exe', 'DMDirc', 'Launcher Update Failed');
- end;
- end;
- if not FileExists(pchar(thisDir+'\DMDircUpdater.exe')) and MoveFile(pchar(sourceDir+'\.DMDircUpdater.exe'), pchar(thisDir+'\DMDircUpdater.exe')) then begin
- showmessage('Launcher update was successful', 'DMDirc');
- end
- else begin
- showmessage('Unable to update DMDircUpdater.exe', 'DMDirc', 'Launcher Update Failed');
- end;
- end
- else begin
- showmessage('Unable to update DMDirc.exe', 'DMDirc', 'Launcher Update Failed');
- end;
- end;
- end;
-
- // Look for client update
- if canDoMore then begin
- if FileExists(pchar(sourceDir+'\.DMDirc.jar')) then begin
- if FileExists(pchar(jarName)) then begin
- if not DeleteFile(pchar(jarName)) then begin
- showmessage('Unable to update DMDirc.jar', 'DMDirc', 'Launcher Update Failed');
- end;
- end;
-
- if MoveFile(pchar(sourceDir+'\.DMDirc.jar'), pchar(jarName)) then begin
- showmessage('Client update was successful', 'DMDirc');
- end
- else begin
- showmessage('Unable to move '''+sourceDir+'\.DMDirc.jar'' to '+jarName, 'DMDirc', 'Update Failed');
- end;
- end;
-
- if launcherUpdate then begin
- showmessage('The DMDirc launcher has been updated, to complete the update please relaunch DMDirc.', 'DMDirc', 'Restart Required');
- end;
- end;
- end
- else begin
- showError('This program can not be run on its own.', 'DMDirc');
- end;
- end.
|