2016-06-27 4 views
0

このカスタムアクションは失敗します。 cmd /c blah blah & pauseWIXカスタムアクションのパスを解決する方法

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="cmd /c icacls UiProxy.exe /SetIntegrityLevel High &amp; pause" /> 

事業が失敗したコマンドライン操作で何が起こったのかについて、いくつかの可視性を取得するための私の小さなトリックです。

UiProxy.exe: The system cannot find the file specified. 
Successfully processed 0 files; Failed processing 1 files 
Press any key to continue . . . 

これは少し驚きです。 UiProxy.exeはTARGETDIRで指定されたフォルダにあります。

INSTALLDIRシンボルをコマンド文字列に解決する方法はありますか?私はこのようなものを作り出す必要があります。私は、[INSTALLDIR]私は、シンボルが解決必要入れている

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="icacls &quot;[INSTALLDIR]UiProxy.exe&quot; /SetIntegrityLevel High" /> 

icacls "C:\Program Files (x86)\UiProxy\UiProxy.exe" /SetIntegrityLevel High 

もちろん、私は、明示的にこのような何かを引用符を配置する必要があります。問題はこれを表現する方法です。

答えて

0

それは標準の決まり文句だから、私が投稿していなかった後のコードでは、私はこれに気づいた:

<CustomAction Id="SetIntegrityLevel" Return="check" 
    Directory="TARGETDIR" Impersonate="no" Execute="deferred" 
    ExeCommand="cmd /c icacls &quot;[INSTALLFOLDER]UiProxy.exe&quot; /SetIntegrityLevel High &amp; pause" /> 

が成功メッセージを生成し、それは正方形に表示されるよう

<Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFilesFolder"> 
     <Directory Id="INSTALLFOLDER" Name="UiProxy" /> 
     </Directory> 
    </Directory> 
    </Fragment> 

は、コマンドラインを指定します角括弧の構文は正しいが、TARGETDIRは間違ったシンボルであり、INSTALLFOLDERでなければならない。

+0

一般に、インストールされたファイルの場所(インストーラによってUIProxy.exeがインストールされています)を使用する場合は、[#UIProxy.exeのファイルID]を使用してコンポーネントのフルパスを指定します。これは、ショートカットでよく使用されます。 –

+0

私はこれを試して、あなたは正しいです。より保守的ですので、それがより良い方法である理由を説明する答えとしてそれを提案し、私はそれを受け入れます。 –

+0

@PeterWoneこのカスタムアクションを実行する順序を提案できますか。 InstallFiles(4000)の後に置いても、必要なプログラムがインストールされていないと表示されます。 – vijiboy

関連する問題