Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Inno Setup - Läuft bestimmte Anwendung? (https://www.delphipraxis.net/101279-inno-setup-laeuft-bestimmte-anwendung.html)

sirius 10. Okt 2007 18:10


Inno Setup - Läuft bestimmte Anwendung?
 
Gibt es einen einfachen Parameter um herauszubekommen, ob eine Anwendung (in meinem Fall: Word) derzeit läuft? Dann soll die (De-)Installation abgebrochen werden.

Mit appMutex kann man ja seine eigene Anwendung testen ob sie läuft. Aber Winword gehört ja bekanntlich nicht mir und ich wüsste auch keinen Mutex den Winword setzt.

Ansonsten müsste ich eben PascalScript nehmen oder eine DLL einbinden.

shmia 10. Okt 2007 18:15

Re: Inno Setup - Läuft bestimmte Anwendung?
 
Delphi-Quellcode:
var
  Word: OleVariant;
  Wordrunning : boolean;
begin
  try
    Word := GetActiveOleObject('Word.Application');
    Word := UnAssigned;
    Wordrunning := True;
  except
    Wordrunning := False;
  end;

sirius 10. Okt 2007 18:59

Re: Inno Setup - Läuft bestimmte Anwendung?
 
Ich meinte in Inno Setup

gnr82 10. Okt 2007 19:07

Re: Inno Setup - Läuft bestimmte Anwendung?
 
Hi,

du kannst den sourcecode auch in inno setup verwenden!

Ich seh aber nochmal genau nach wo...

Daniel Schuhmann 10. Okt 2007 19:13

Re: Inno Setup - Läuft bestimmte Anwendung?
 
Mit weniger Ressourcen geht's auch, wenn man mit MSDN-Library durchsuchenFindWindow nach dem Klassennamen 'OpusApp' fahndet.

sirius 10. Okt 2007 19:40

Re: Inno Setup - Läuft bestimmte Anwendung?
 
Ja, ok. Das hätte ich jetzt nicht gedacht.

[roter kasten]
Ja, das gefällt mir irgendwie besser. Ich hatte es grad über process32first gemacht. Und das ganze in einer DLL die ich mit "dontcopy" mitgegeben habe. Dummerweise brauch ich die DLL auch beim deinstallieren.
(Hatte den roten Kasten erst gar nicht gesehen und das DP-Fenster lag die ganze Zeit im HG)

Edit:
Ich wollte ja nur wissen, ob man es gleich im Setup-Programm einstellen kann. Weis nicht wieviel ein OleObject brauch. Hier ist die universelle Lösung auf PS umgesetzt:
Code:
[ Code ]

type processentry32 = record
    dwSize: DWORD;
    cntUsage: DWORD;
    th32ProcessID: DWORD;
    th32DefaultHeapID: DWORD;
    th32ModuleID: DWORD;
    cntThreads: DWORD;
    th32ParentProcessID: DWORD;
    pcPriClassBase: Longint;
    dwFlags: DWORD;
    szExeFile: array[0..259] of Char;
  end;
 
function CreateToolhelp32Snapshot(flags,ProcessID: Dword):THandle;
external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';

function process32first(snaphandle:thandle;var processentry:processentry32):boolean;
external 'Process32First@kernel32.dll stdcall';
function process32next(snaphandle:thandle;var processentry:processentry32):boolean;
external 'Process32Next@kernel32.dll stdcall';
procedure closehandle(handle:thandle);
external 'CloseHandle@kernel32.dll stdcall';

const TH32CS_SnapProcess=2;

function test(name:string):boolean;
var handle:Thandle;
    pe:processentry32;
    s:string;
    i:integer;
begin
  handle:=CreateToolHelp32Snapshot(TH32CS_SnapProcess, 0);
  pe.dwSize:=sizeof(pe);
  try
    process32first(handle,pe);
    repeat
      i:=length(name)+1;
      if i>250 then i:=250;
      setlength(s,i);
      i:=1;
      while (i<=length(s))and(pe.szExeFile [i-1]<>#0) do begin //irgendiwe ging das nicht anders ??
        s[i]:=pe.szexefile[i-1];
        i:=i+1;
      end;
      setlength(s,i-1);
      result:=uppercase(name)=uppercase(s);
    until result or (not process32next(handle,pe));
  finally
    closehandle(handle);
  end;
end;


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