0

アプリケーションのサービスの 1 つをインストールするためのカスタム アクションが Wix にあります。

<Custom Action='ManagedInstall' After="InstallFinalize"/>

    <CustomAction Id="ManagedInstall"
                  Directory='INSTALLDIR'
                  ExeCommand='"[WindowsFolder]\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" /LogToConsole=false ControlService.dll'
                  Impersonate='yes'
                  Return='check'>
    </CustomAction>

これは、Windows XP および 7 (UAC を昇格させた状態) では、暗号化された一部のラップトップを除く、すべてのデスクトップ、仮想マシン、またはラップトップで正常に動作します。

installUtil.exe コンソールの実行が暗号化によって中断されるため (何らかの理由で、システム間で見られる唯一の違い) が原因であると仮定して、上記のカスタム アクション コードを置き換えるための解決策を試みていました。

        <Component Id='ControlServiceDLL' Guid='27C58A4E-E1A9-4b85-B048-F8BBB1BF3C76'>
          <File Id='ControlService.dll'
              Name='ControlService.dll'
              DiskId='1'
              Source='Data\ControlService.dll'
              Vital='yes'
              KeyPath='yes'/>

          <ServiceInstall
              Id="ControlServiceInstall"
              Type="shareProcess"
              Vital='yes'
              Name='ControlService'
              DisplayName='Control Service'
              Description='Control Service Description'
              Start="demand"
              ErrorControl='ignore'
              Interactive="no">
          </ServiceInstall>

          <ServiceControl Id="StartService" Remove="uninstall" Name="Control Service" Wait="yes" />
        </Component>

また、最初は起動に失敗するため、Service Control の起動/停止コマンドを削除して、インストールされているかどうかを確認する必要がありました。はい、正常にインストールされますが、サービスを手動で開始することさえできませんでした。

観察により、誰かがこれで私を助けようとするのに役立つかもしれない次のことがわかりました。

以下で見つけた2つの異なる方法でサービスプロパティを比較する 私の問題に答えてくれる人に役立つことを願っています.

カスタム アクションを使用する場合: Service Properties Executable Path shows, C:\windows\SysWOW64\dllhost.exe /Processid:{926E3CF4-B966-4E61-A46B-C3C49F579F7C}

Service Install を使用すると、「C:\Program Files (x86)\My Test Company\Services\ControlService.dll」と表示されます。

4

2 に答える 2

1

あなたが直面している/直面している問題は、dllをサービスとしてホストしようとしているということです。Windows サービスは実行可能ファイル (exe) です。

Wix 3.0 以降を使用している場合は、ここで説明されているように、私が陥ったキーパスの落とし穴を含む非カスタム アクション アプローチを使用してください: http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx

于 2011-08-25T20:58:44.740 に答える
-2

管理者権限を持つアプリケーション マニフェストを含めることができるため、すべてのイベントは管理者アカウントで作成/呼び出されます。

msi がある場合は、dotnetinstallerツールを使用できます。これにより、msi が exe に変換され、UAC がセットアップにアタッチされます。したがって、ユーザーが管理者権限を持っていない場合、インストーラーはそれを要求します。

于 2011-08-03T18:10:43.073 に答える