0

私は現在wixを使用しており、インストーラーを開発しました。このインストーラーは、C++カスタムアクションDLLを呼び出します。DLLとセットアップの両方が正常にビルドされていますが、インストールしようとすると、インストールは「エラーのためにインストーラウィザードが途中で終了しました」で終了します。考えられる答えを知っている人はいますか?

これはC++DLL関数です。

extern "C" UINT __stdcall StopOrcService(MSIHANDLE hInstall)

それから私はその下で関数のコードを続けます。次に、defファイルを使用してエクスポートしました。

<CustomAction Id='StopOrcService' BinaryKey='StopOrcService' DllEntry='StopOrcService' Execute='immediate' Return='check'/>

<InstallExecuteSequence>
  <Custom Action='StopOrcService' After='ProcessComponents' />
</InstallExecuteSequence>

<Binary Id='StopOrcService' SourceFile='SetupDLL.dll' />

それが私のwixコードです。

4

2 に答える 2

1

考えられる答えは数十あり、C++とWiXコードを見ずに言うのは難しいです。

考慮事項:

C ++ dllは、カスタムアクションとして意図的に作成されましたか?(Type1 stdcall MsiCustomアクションをエクスポートしますか?)その関数の名前は何ですか?その関数名はWiXコードで正しいですか?関数にログを記録して、実行されたかどうかを確認しましたか?

更新:インストーラーがネイティブに実行できることを実行するためにカスタムアクションを使用するべきではありません。また、昇格が必要なCAを作成したり、マシンの状態を変更したりする場合は、即時ではなく偽装を行わずに、常に延期としてスケジュールする必要があります。戦術的な問題を解決するのではなく、戦略的な問題を修正するためのインストーラーのベストプラクティスについて読むべきことがたくさんあります。

于 2012-07-26T14:42:16.023 に答える
-1

次の行を追加するのを忘れたため、コードが完全に機能することに気付きました。うまくいけば、これは他の人を助けるでしょう。:)

#pragma comment(linker, "/EXPORT:StopOrcService=_StopOrcService@4")
于 2012-07-27T10:05:11.970 に答える