4

WIX 3.5を使用して 1 つのパブリッシャー ポリシーを GAC にインストールする適切な方法はどれですか?

私はこれをやろうとしました:

      <File
            Id="LIBGAC"
            Assembly=".net"
            KeyPath="yes"
            Vital="yes"
            Name="ClassLibrary1.dll"
            ProcessorArchitecture="msil"
            DiskId="1"
            Source="..\ClassLibrary1\bin\Release\ClassLibrary1.dll"  >
      </File>
    </Component>
    <Component Id="Config"  Guid="F089B1AA-B593-4662-9DF4-F47EB9FBA1F4"  >
      <File
            Id="LIBGACPolicy"
            Assembly=".net"
            KeyPath="yes"
            Vital="yes"
            Name="Policy.1.0.ClassLibrary1.dll"
            DiskId="1"
            Source="..\ClassLibrary1\policy.1.0.ClassLibrary1.dll"  >
      </File>
      <File 
            Id="LIBGACPolicyConfig" 
            Source="..\ClassLibrary1\policy.1.0.ClassLibrary1.config" 
            CompanionFile="LIBGACPolicy">
      </File>
    </Component>
  </Directory>

VS2008 でコンパイルすると、次のエラーが表示されます。

policy.1.0.ClassLibrary1.dll が無効のようです。これが有効なアセンブリ ファイルであること、およびユーザーがこのファイルへの適切なアクセス権を持っていることを確認してください。詳細: HRESULT: 0x8013101b

そして最後に、VS2010 でコンパイルする場合、問題はないようです。しかし、インストール プロセスの最終段階では、DLL は適切にインストールされていますが、発行元ポリシーはインストールされていません。また、インストール中に生成されたログを読みましたが、原因を見つけることができませんでした。

読んでくれてありがとう。

4

3 に答える 3

2

私は似たようなことをしていて、VisualStudio2010とMsBuildを使用したビルドサーバーでうまく機能しています。

<Directory Id="TARGETDIR" Name="SourceDir">
   <Directory Id="ProgramFilesFolder">
      <Directory Id="Gac" Name="Gac">
         <!-- The component with the assembly -->
         <Component Id="MiClassDLL" Guid="*">
            <File Id="MiClass.dll" Assembly=".net" KeyPath="yes"
                  Source="$(var.MiClass.TargetPath)" />
         </Component>
         <!-- The component with the policy -->
         <Component Id="PolicyMiClassDLL" Guid="{YOUR_GUID_HERE}">
            <File Id="PolicyMiClass.dll" KeyPath="yes"
                  Source="$(var.MiClass.TargetDir)Policy.1.0.MiClass.dll" />
            <File Id="PolicyMiClass.config" KeyPath="no"
                  Source="$(var.MiClass.ProjectDir)Policy.1.0.MiClass.config" />

         </Component>
      </Directory>
   </Directory>        
</Directory

私の場合、同じプロジェクトディレクトリにpolicy.configファイルがあり、同じ出力にポリシーdllを作成して、インストーラースクリプトを簡単にします。

ポリシーコンポーネントにはGUIDが必要であり、何らかの理由で、ポリシーdllと構成ファイルが同じディレクトリ/コンポーネントにあることが内部的に必要であることに気付きました。

次のコマンドを使用して、MiClassプロジェクトのビルド後のイベントでポリシーアセンブリをビルドします。

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\al.exe"
    /link:"$(ProjectDir)Policy.1.0.MiClass.config"
    /out:"$(TargetDir)Policy.1.0.MiClass.dll"
    /keyfile:"$(SolutionDir)MyKeys.snk"
    /comp:"My Company"
    /prod:"My Product" 
    /productv:1.0 
    /version:1.0.0.0

これがあなたのために働くことを願っています。

于 2012-05-17T16:39:29.980 に答える
0

私はポリシー DLL でいくつかの作業を行いましたが、私が確認できる唯一の違いは、ファイルの命名規則が私たちのものとは少し異なることです。

それ以外の

policy.1.0.ClassLibrary1.dll
policy.1.0.ClassLibrary1.config

使用した

policy.1.0.ClassLibrary1.dll
ClassLibrary1.dll.config
于 2011-10-18T21:22:30.020 に答える