Com 如何让我的WiX产品脚本正确安装active x控件?
形势 我已经编写了一个自定义的activex控件,用于另一个非WEB应用程序。当我手动运行“regasm/codebase MyMacTest.dll”时,该控件已注册,可以使用jscript解释器在应用程序中使用。这意味着我需要创建一个ActiveXObject等 因此,我的下一步是使用Wix工具集3.11创建安装MSI。根据我读到的内容,我需要对dll运行Heat来创建输出wxs内容。我这样做了,并将其添加到我的product.wxs编译并运行。它正确部署了我的dll,验证了注册表项,但它在应用程序中不起作用 我的c#代码: 已编译DLL的热量输出:Com 如何让我的WiX产品脚本正确安装active x控件?,com,wix,Com,Wix,形势 我已经编写了一个自定义的activex控件,用于另一个非WEB应用程序。当我手动运行“regasm/codebase MyMacTest.dll”时,该控件已注册,可以使用jscript解释器在应用程序中使用。这意味着我需要创建一个ActiveXObject等 因此,我的下一步是使用Wix工具集3.11创建安装MSI。根据我读到的内容,我需要对dll运行Heat来创建输出wxs内容。我这样做了,并将其添加到我的product.wxs编译并运行。它正确部署了我的dll,验证了注册表项,但它在
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Directory Id="dir39B22699688E51DCD8DCBB99A47E835B" Name="Debug" />
</DirectoryRef>
</Fragment>
<Fragment>
<DirectoryRef Id="dir39B22699688E51DCD8DCBB99A47E835B">
<Component Id="cmp88AF0B935698304B52D96A0CEA4F7661" Guid="PUT-GUID-HERE">
<Class Id="{765563F5-55B0-41E1-9F49-311EC88F6BA2}" Context="InprocServer32" Description="MyMacTest.MacroTest" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="MyMacTest.MacroTest" Description="MyMacTest.MacroTest" />
</Class>
<File Id="filC0F476996EBA80AC7C8F27AA886F48E0" KeyPath="yes" Source="SourceDir\Debug\MyMacTest.dll" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="Class" Value="MyMacTest.MacroTest" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="Assembly" Value="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#filC0F476996EBA80AC7C8F27AA886F48E0]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="Class" Value="MyMacTest.MacroTest" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="Assembly" Value="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="CodeBase" Value="file:///[#filC0F476996EBA80AC7C8F27AA886F48E0]" Type="string" Action="write" />
</Component>
</DirectoryRef>
</Fragment>
===========================================
msi安装
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}]
@="MyMacTest.MacroTest"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories]
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
@=""
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:\\Program Files (x86)\\BPE\\AddIns\\MyCustom\\MyMacTest.dll"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0]
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:\\Program Files (x86)\\BPE\\AddIns\\MyCustom\\MyMacTest.dll"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\ProgID]
@="MyMacTest.MacroTest"
不确定MSI安装为何将WOW6432节点添加到路径。。。但这些是不同之处
谢谢 更新:请注意COM是位感知的。在您的示例中,您正在构建一个32位MSI,它将在32位注册表中安装COM服务器。您可能从64位进程调用它,但这不起作用 你通常的做法很有效。要进行故障排除,您需要: 1) 创建虚拟机并对其进行快照 2) 安装MSI 3) 运行注册表差异工具,如安装Watch Pro或InControl智能驭享。拍摄注册表的快照 4) 从提升的命令提示符手动运行regasm/codebase命令 5) 拍摄注册表的另一个快照并运行差异报告 6) 检查这些差异是否存在有意义的相关差异,并将它们编入WXS源代码中 7) 重建MSI 8) 应用VM快照以恢复到干净状态 9) 安装MSI并重新测试功能 如果你想知道为什么热本身不工作,答案与COM有关。有时候嗅探技术就是不起作用。在.NET COM互操作/COM可见程序集的情况下,有时答案在于此警告。在您的情况下,这可能与使用ClassInterface属性有关 可以使用/regfile选项生成包含以下内容的.reg文件: 更改注册表项,而不是直接对 登记处。您可以通过导入来更新计算机上的注册表 使用注册表编辑器工具(Regedit.exe)创建.reg文件。请注意 .reg文件不包含任何可由用户进行的注册表更新 用户定义的寄存器函数。请注意,仅使用/regfile选项 发出托管类的注册表项。此选项不发射 TypeLibIDs或InterfaceID的条目 如果您无法解决此问题,我有25年处理此类问题的经验。如果您能够共享DLL并给我一个代码段进行冒烟测试,我可以创建一个WiX代码段来正确注册程序集
PS-我将合并这两个组件。COM/Registry元素应该与它们所用于的文件属于同一个组件。您是否尝试使用and进行此操作?看看这个@PavelAnikhouski,我会看看这个线程,但是为了回答你的问题,我没有尝试使用TypeLib。正如我提到的,我是新来的,所以。。。仍在试验中。手动注销所有内容,然后安装MSI,仅使用
regedit.exe
导出HKCR
,然后手动注册,仅再次导出HKCR
,并使用任何diff工具区分导出的*.reg
文件-例如。请报告差异。您还可以使用查看实际失败的部分—劳动密集型,但它可以工作。@SteinÅsmul我已经发布了差异。WOW6432节点路径与32位和64位组件注册有关。非常常见的问题。您的组件是64位还是32位?我需要出发一段时间,但也许你想在这里读一读:-如果我猜的话,我会说你需要将组件设置为64位。只需将Win64=“yes”添加到您的MSI组件中,并尝试一下。但总有更多的错误:-)克里斯托弗:目前没有访问干净的虚拟机的权限。。。但是我确实做了/regfile,我的产品wxs和regfile之间的唯一区别是代码基值的表示方式。。。。使用wix时,代码基值为:file///c:\program files(x86)\..\使用dump do/codebase/regfile时,代码基文件为:file///c/program files(x86)/。。。。等唯一的区别是file语句中的斜杠。至于我用来创建DLL的代码。。。这正是我在帖子中列出的。这是一个项目的概念证明。如果没有一个干净的环境,就不可能说这是否是唯一的区别。我已经发布了差异。我已经回答了如何做到这一点的过程。我无法在此网站上进一步帮助您,因为我没有DLL。如果您想获得一些免费帮助,请查找我的网站和联系信息,并通过电子邮件发送DLL以及如何测试调用其中的类,我可以在VM上快速执行上述操作。更新:请注意COM是位感知的。在您的示例中,您正在构建一个32位MSI,它将在32位注册表中安装COM服务器。您可能从64位进程调用它,但这不起作用。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"><?define MyMacTest_TargetDir=$(var.MyMacTest.TargetDir)?>
<Product Id="*" Name="MyMacSetup"
Language="1033"
Version="1.0.0.0"
Manufacturer="Mega Software Stuff"
UpgradeCode="b3e8921b-22da-4f05-a79f-36cafde09fce">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes"/>
<Feature Id="ProductFeature" Title="MyMacSetup" Level="1">
<ComponentGroupRef Id="ProductComponents" />
<ComponentRef Id="cmp88AF0B935698304B52D96A0CEA4F7661"/>
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="Bp" Name="BPE">
<Directory Id="Addin" Name="AddIns">
<Directory Id="INSTALLFOLDER" Name="MyCustom" />
</Directory>
</Directory>
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="MyMacTest.dll" Guid="21b3cee3-1da3-4f48-89db-7c2f6cf11431">
<File Id="MyMacTest.dll" Name="MyMacTest.dll" Source="$(var.MyMacTest_TargetDir)MyMacTest.dll" />
</Component>
</ComponentGroup>
</Fragment>
<!-- This segment gotten from heat: "c:\Program Files (x86)\WiX Toolset v3.11\bin\heat" file MyMacTest.dll -out mymactest.wxs -->
<Fragment>
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="cmp88AF0B935698304B52D96A0CEA4F7661" Guid="b33671b4-2f75-44bc-8435-f16c5f9b7268">
<Class Id="{765563F5-55B0-41E1-9F49-311EC88F6BA2}" Context="InprocServer32" Description="MyMacTest.MacroTest" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="MyMacTest.MacroTest" Description="MyMacTest.MacroTest" />
</Class>
<!--<File Id="filC0F476996EBA80AC7C8F27AA886F48E0" KeyPath="yes" Source="$(var.MyMacTest_TargetDir)MyMacTest.dll" />-->
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="Class" Value="MyMacTest.MacroTest" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="Assembly" Value="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#MyMacTest.dll]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="Class" Value="MyMacTest.MacroTest" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="Assembly" Value="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32" Name="CodeBase" Value="file:///[#MyMacTest.dll]" Type="string" Action="write" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}]
@="MyMacTest.MacroTest"
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories]
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/Kevin/OneDrive/Documents/MyMacTest.DLL"
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0]
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:/Users/Kevin/OneDrive/Documents/MyMacTest.DLL"
[HKEY_CLASSES_ROOT\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\ProgId]
@="MyMacTest.MacroTest"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}]
@="MyMacTest.MacroTest"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories]
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}]
@=""
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:\\Program Files (x86)\\BPE\\AddIns\\MyCustom\\MyMacTest.dll"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\InprocServer32\1.0.0.0]
"Class"="MyMacTest.MacroTest"
"Assembly"="MyMacTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=583df5a1a2a0a8da"
"RuntimeVersion"="v4.0.30319"
"CodeBase"="file:///C:\\Program Files (x86)\\BPE\\AddIns\\MyCustom\\MyMacTest.dll"
[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{765563F5-55B0-41E1-9F49-311EC88F6BA2}\ProgID]
@="MyMacTest.MacroTest"