0

WiXでMSIインストーラーを作成しました。特にWindowsXPSP3 +を対象としています。インストールの完了時にカスタムアクションを実行して、NSSM.exeを介してアプリケーションをサービスとして登録します。コマンドラインから実行した場合のバッチファイルは、記述されたとおりに実行されますが、一部として実行した場合はインストーラーのインストールが完了します。コマンドプロンプトが開き、スクリプトが実行されますが、アプリケーションが登録されていません。

    <CustomAction Id="installLoft"
              Directory="ModulesFolder"
              ExeCommand="[ModulesFolder]winInstall.cmd"
              Execute="deferred"
              Return="check"
              HideTarget="no"
              Impersonate="no" />
<InstallExecuteSequence>
  <Custom Action="installLoft" Before="InstallFinalize"><![CDATA[ (NOT Installed) AND (NOT REMOVE) ]]></Custom>
</InstallExecuteSequence>

バッチスクリプトの内容は次のとおりです。

@ECHO OFF
SET PATH=%PATH%;%APPDATA%\app1\
IF "%ProgramFiles(x86)%"=="" (
    set PATH=%PATH%;%ProgramFiles%\app1\
) ELSE (
    set PATH=%PATH%;%ProgramFiles(x86)%\app1\
)
"app1\modules\bin\nssm.exe" install my_service_name_app1 app1.cmd -g

したがって、app1はサービスとして実行する必要があるスクリプトであるため、NSSM.exeが必要です。すべてのコンポーネント/ファイルが適切な場所にインストールされます。

私が見逃しているいくつかのWinXPの警告はありますか?インストーラーを実行したのと同じユーザーでバッチを手動で実行すると、サービスが登録されます。

ご協力いただきありがとうございます。

4

2 に答える 2

0

これは実際に実行されていますか?一時停止コマンドを追加して、表示できるようにしてください。私の経験では、カスタムアクションを起動するときに、WindowsインストーラーがShellExecuteの代わりにCreateProcessを使用することが示されています。これにより、UACプロンプトが防止されますが、ファイルの関連付けを処理できず、.cmdファイルなどのドキュメントファイルの代わりにexeプロセスを起動する必要があります。

于 2012-07-26T11:45:15.777 に答える
0

私はそれを理解しました。私が見つけたのは、サービスが登録されているときにWin XPで、ローカルシステム(またはシステム)ユーザーの下に登録されていることです。ただし、SYSTEM ユーザーには APPDATA 環境変数が設定されていません。何が起こっていたのかというと、私のスクリプトがサービスを開始しようとして、APPDATA が定義されていないために黙って失敗するということです。

カスタム MYAPPDATA システム レベル環境変数を宣言/定義しましたが、インストーラーが完了すると (再起動後)、サービスが起動して実行されます。

これが、標準の環境変数に依存している他の誰かに役立つことを願っています。

于 2012-07-26T17:15:27.540 に答える