gpt4 book ai didi

WiX 相当于 "Regasm.exe my.dll/codebase"?

转载 作者:行者123 更新时间:2023-12-03 02:03:22 25 4
gpt4 key购买 nike

CodeProject 有一个很棒的 Windows shell extension tutorial .

编译,运行Regasm.exe CSShellExtContextMenuHandler.dll/codebase,shell扩展就可用了,效果很好。

但是要求用户运行 Regasm 对用户来说并不友好,所以我编写了下面的小 WiX 脚本。 (刚刚复制了 heat 的输出,以及我想要使用的依赖项 DLL)。

问题:当我安装生成的 MSI 时,外壳扩展不会出现(在 Windows 资源管理器中,右键单击文件不会显示我的项目,尽管它与 Regasm 一起使用)

<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>

<Product Name='HelloWorld Shell Extension' Id='2afd44ab-16d7-40f4-8741-69ad546cb7cf' UpgradeCode='c5139d19-21ba-43c6-a17d-68760331f332'
Language='1033' Codepage='1252' Version='0.4.4' Manufacturer='Me'>

<Package Id='*' Keywords='Installer' Description="HelloWorld Shell Extension Setup" Manufacturer='Me'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />

<Media Id='1' Cabinet='HelloWorldShellExtension.cab' EmbedCab='yes' DiskPrompt='HelloWorld CAB' />
<Property Id='DiskPrompt' Value="HelloWorldShellExtension Bundle CAB Installation" />

<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='INSTALLDIR' Name='HelloWorldShellExtension'>
<Component Id="cmpB0970E4FB9610FC20E1C6B6B2D45C606" Guid="7044db96-17d3-4d4f-93b0-135b89b042c8">
<Class Id="{CE43A2AB-B457-49BF-C83F-4306208D438B}" Context="InprocServer32" Description="CSShellExtContextMenuHandler.FileContextMenuExt" ThreadingModel="both" ForeignServer="mscoree.dll">
<ProgId Id="CSShellExtContextMenuHandler.FileContextMenuExt" Description="CSShellExtContextMenuHandler.FileContextMenuExt" />
</Class>
<File Id="fil5B7C752C5541C807852A6781921F95AB" KeyPath="yes" Source="bin\CSShellExtContextMenuHandler.dll" />
<RegistryValue Root="HKCR" Key="*\shellex\ContextMenuHandlers\{ce43a2ab-b457-49bf-c83f-4306208d438b}" Value="CSShellExtContextMenuHandler.FileContextMenuExt Class" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\Implemented Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32\1.0.0.0" Name="Class" Value="CSShellExtContextMenuHandler.FileContextMenuExt" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32\1.0.0.0" Name="Assembly" Value="CSShellExtContextMenuHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=73df467e0a99a326" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32\1.0.0.0" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32\1.0.0.0" Name="CodeBase" Value="file:///[#fil5B7C752C5541C807852A6781921F95AB]" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32" Name="Class" Value="CSShellExtContextMenuHandler.FileContextMenuExt" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32" Name="Assembly" Value="CSShellExtContextMenuHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=73df467e0a99a326" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32" Name="RuntimeVersion" Value="v4.0.30319" Type="string" Action="write" />
<RegistryValue Root="HKCR" Key="CLSID\{CE43A2AB-B457-49BF-C83F-4306208D438B}\InprocServer32" Name="CodeBase" Value="file:///[#fil5B7C752C5541C807852A6781921F95AB]" Type="string" Action="write" />
</Component>
<Component Id='Libraries' Guid='f982a0bb-824d-4835-921d-e51b47b8598b'>
<File Id='dependency.dll' Name='dependency.dll' Source='bin\dependency.dll' DiskId='1' />
</Component>
</Directory>
</Directory>
</Directory>

<Feature Id='HelloWorldShellExtensionFeature' Title='HelloWorld' Description='HelloWorld' Level='1' AllowAdvertise='no'>
<ComponentRef Id="cmpB0970E4FB9610FC20E1C6B6B2D45C606" />
<ComponentRef Id="Libraries" />
</Feature>

<UI>
<UIRef Id="WixUI_InstallDir" />
</UI>

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
</Product>
</Wix>

我尝试将 Root="HKCR"Key="[...]" 更改为 Root="HKLM"Key="SOFTWARE\Classes\[...]",模仿 Regasm 实际安装的按键,但这也不起作用。

最佳答案

首先,您使用的 CLSID 与原始示例源不同。也许您对其进行了编辑以使其成为您自己的。确保您使用的值与 FileContextMenuExt 类上的属性相同。

WiX 的 heat.exe 似乎不支持代码库元素。也许假设是,由于您正在计算机范围内注册 COM 程序集,因此您也可以将其放在计算机范围的程序集位置(即 GAC)中。如果这样做,则不需要代码库。

heat file ... 将生成除代码库元素之外的所有内容,但我明白,您已经手动输入了它。您还拥有其他必需的注册条目,*\shellex\ContextMenuHandlers。它是特定于应用程序的元素,因此无法生成。但是,您也是手动输入的。

最后,安装程序和 explorer.exe 必须具有相同的“位数”。否则,安装程序可能会为 32 位 explorer.exe 创建注册表项,而 64 位 explorer.exe 将看不到它们。要部署该产品,您必须拥有 x86 和 X64 版本的安装程序。您可以在 Wix/Product/Package 元素中显式设置包的平台。

除此之外,您的 Product.wxs “可以在我的机器上运行。”

关于WiX 相当于 "Regasm.exe my.dll/codebase"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16646934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com