2010-10-06 45 views
0

我正在使用包含少量dll的WiX创建一个安装程序。在原始脚本中首先调用gacutil.exe,然后为每个dll调用regasm。将此想法转换为WiX时遇到问题。下面是安装到GAC的代码片段:对于同一个dll,WiX GAC安装和regasm不起作用

<Component Id="GMAG.Core.Serialization.dll" Directory="_2.2.8.0" Guid="{my_guid}"> <File Id="my.dll" Source="my_src" Assembly=".net" KeyPath="yes" Checksum="yes"/> </Component>

现在的问题是维克斯将如何执行大会注册?我的问题是:

  1. 我不能在同一个组件中创建另一个<File Id="my.dll" Source="my_src" KeyPath="yes"/>因为只能有一个keyPath =“yes”属性/组件。
  2. 我不能在组件级别放置keyPath =“yes”,因为它会中断组件引用计数系统。
  3. 如果没有keyPath =“Yes”,我无法创建<File Id="my.dll" Source="my_src"/>,因为它会生成编译错误。
  4. 我无法创建一个独立的组件,因为两个组件会尝试安装相同的文件。

我知道我不需要使用heat何时调用regasmregsvr32。在组件代码中:<File Id="my.dll" Source="my_src" KeyPath="yes"/>应该足够用于注册。 我使用热量,现在我卡住了,因为我还必须进行组装注册。

回答

0

Assembly =“.net”会将您的程序集放到GAC中,然后您需要使用注册表项来注册COM。如果你对你的程序集运行Heat,它应该生成你需要的代码片段。

0

这就是我们如何通过维克斯3.5 GAC中注册DLL:

<Component Id="Level0GAC" Guid="21735A8C-DD0C-4f4e-8AB5-B5BB8C55726B" DiskId='1'> 
        <File Id='Level0' Name='DLLFileName.dll' DiskId='1' KeyPath="yes" 
         Source='DLLFileName.dll' 
         Checksum="yes" Assembly=".net" AssemblyManifest="Level0"> 
        </File> 
</Component> 

事实上,可以设置OT一个的keyPath一个组件内只有一个文件“是”,这就是为什么几个DLL文件,你应该创建几个组件。