2017-04-06 10 views
0

TopShelfを使用して構築されたアプリケーションをインストールしようとしています。アプリケーション自体はうまく動作し、問題はありません。私が遭遇する問題は、サービスをインストールしようとするときです。 TopShelfサービスは、myapp.exe install <options>命令を使用して(管理者コマンドラインから)インストールされます。私はカスタムアクションで命令をラップしました(下記参照)。インストール時にブラックボックスのポップアップが表示されるので、これが実行されます。ただし、サービスのインストールに失敗します。管理者コマンドラインからmsiをインストールすると、サービスが正しくインストールされます。私はすべての管理者関連のパラメータをWiXファイルに含めました(以下も参照してください)。私は完全にアイデアがなくなり、助けが必要な人は誰でもWiXファイルで何かを見ることができますか、誰が何がサービスのインストールを妨げているか考えている人はいますか?WiXでTopShelfをインストールすると、管理者権限で失敗する

Topshelf - Custom Action in Wix Not Executing

Add Coffee and Shake Well - TopShelf

を私も実行するために別のWiXのカスタムアクションプロジェクトのtopshelfアプリへの呼び出しをラップしようとしていると、これも同じで失敗した:私は試してみました何

理由。

<Product Id="*" Name="PackageName" 
     Language="1033" 
     Version="1.0.0.0" 
     Manufacturer="Manufacturer" 
     UpgradeCode="e7780903-3cf9-4ecc-b65a-45bc18b500df"> 
    <Package InstallerVersion="200" 
      Compressed="yes" 
      InstallScope="perMachine" 
      InstallPrivileges="elevated" 
      Platform="x64" /> 

    <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> 

    <MajorUpgrade AllowSameVersionUpgrades="yes" 
       DowngradeErrorMessage="A newer version of [ProductName] is already installed." 
       Schedule="afterInstallInitialize" /> 
    <MediaTemplate EmbedCab="yes"/> 

    <Feature Id="ProductFeature" Title="FeatureName" Level="1"> 
    <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 

    <CustomAction Id="InstallService" 
       FileKey="MyApp.exe" 
       ExeCommand="install" 
       Impersonate="yes" 
       Execute="immediate" /> 
    <CustomAction Id="StopService" 
       FileKey="MyApp.exe" 
       ExeCommand="stop" 
       Execute="immediate" /> 
    <CustomAction Id="UninstallService" 
       FileKey="MyApp.exe" 
       ExeCommand="uninstall" 
       Execute="immediate" /> 

    <InstallExecuteSequence> 
    <Custom Action="InstallService" After="InstallFinalize" > 
     NOT Installed AND NOT REMOVE 
    </Custom> 
    <Custom Action="StopService" After="InstallInitialize" > 
     (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
    </Custom> 
    <Custom Action="UninstallService" After="StopService"> 
     (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
    </Custom> 
    </InstallExecuteSequence> 
</Product> 

答えて

1

カスタムアクションにはいくつか問題があります。 1つは、InstallService CAが即時であることです。これは、1)ファイルがインストールされる前で、2)標高で実行されないことを意味します。それは、InstallFinalizeの前に延期される必要があります。

通常のWindowsサービスの場合は、ServiceInstallノードを使用してServiceInstallノードをインストール(アンインストール)し、ServiceControlを使用してサービスの停止、開始、および削除を行う必要があります。

+0

あなたのコメントをお寄せいただきありがとうございます。後で猶予が得られたら、延期終了の変更をお試しください。トップシェルフエコシステムは一見価値があります.Windowsサービスの開始と停止を包括して、Windowsサービスプロジェクトをコンソールアプリケーションとしてラップせずにデバッグから実行できるようにします。また、スイッチを使ってメインアプリケーションからインストールすることもできます再コンパイルせずに、見て分かる価値がある、私の説明は素晴らしいことではありませんでした! –

+0

Hetへのリンク:http://topshelf-project.com –

+0

Brill、あなたは正しいです、CAは次のものを持つように変更します: 'Impersonate =" no "'、 'Execute =" deferred "' set Execute 'Before = "InstallFinalize"あなたの助けに感謝します!今すぐアンインストールを把握してください!決してそんなに困ったことはありません! –

関連する問題