0

installshieldインストーラーでExcelプロセスを検出しようとしています。appsearch の後に実行され、プロセスが見つかった場合にウィンドウをポップしてユーザーに警告を表示するカスタム アクションがあります。

installsite.org で見つけたいくつかの古い例を使用して、findWindow() 呼び出しを使用してみました。どちらもプロセスリストにexcel.exeが見つからないようです。

これは、findwindow を試すときに使用していたコードのスニペットです。

export prototype MyTestFunction(HWND);

function MyTestFunction(hMSI)
HWND nHwnd;
begin   
    nHwnd = FindWindow("EXCEL", "");
    if (nHwnd != 0) then
    MessageBox("found excel", WARNING);
    SendMessage(nHwnd, WM_CLOSE, 0, 0);
    else
    MessageBox("cant find excel", WARNING);
    endif;

end;

アプリケーションが開いているか閉じているかに関係なく、else ブロックだけが起動しているように見えることに注意してください。

私はこれのいくつかの異なるバリアントを試しましたが、主に「Excel」を異なる大文字、拡張子、およびバージョンに置き換えるだけです。ウィンドウを検出するものはないようです。私は Spy++ を使用しましたが、現在開いているノートブックの名前に基づいてウィンドウの名前が付けられていることが報告されました。これは、ユーザーが何を開いた可能性があるかを知る方法がないため、事態を複雑にします。

ここで提案を受け付けています。このソリューションの唯一の要件は、Installshield 内からカスタム アクションまたはインストール条件の一部として実行できる必要があることです。

4

3 に答える 3

1

vbscript カスタム アクションを使用できます。インストール条件の一部として使用する場合は、UISequence または ExecuteSequence (またはその両方) の開始時にこの CA を実行できます。インストール プロセスを停止する場合は、vbscript 関数にコードを追加し、カスタム アクションの [処理を返す] オプションを [同期 (終了コードを確認)] に構成します。

これが私のスクリプトです:

Public Function StopProcess

Dim objWMIService, objProcess, colProcess
Dim strComputer, executableFileName
Const IDABORT = 3    

strComputer = "."
executableFileName = "excel.exe"

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & executableFileName & "'")

For Each  objProcess in colProcess
   objProcess.Terminate()
   ' OR
   StopProcess = IDABORT
   Exit for
Next
End function
于 2015-09-22T14:04:01.050 に答える
0

関連するウィンドウに落とし穴があることを確認することで、プロセスが実行されているかどうかを明らかにしようとします。

私の提案は、Excel.exe のプロセスが実行されているかどうかを検出することです。システム上のプロセスを列挙する必要があります。それに応じてコードを変更します。C++ を使用する方が簡単ですが、今述べたことを達成する方法を示す例が多数あります。

https://community.flexerasoftware.com/archive/index.php?t-162141.html

https://community.flexerasoftware.com/archive/index.php?t-188807.html

取った

于 2015-07-22T05:12:58.457 に答える