Registering SharpShell extension using SRM via WIX installer

Firstly I should clarify that I am a novice and have been struggling to understand the WIX formatting, but by cobbling together examples found on-line, I now have the files installing fine so I next need to register my DLL.

I used the example here as a starting point: How to deploy a SharpShell-based shell extension via WiX? but it seems that the SharpShell tool srm.exe may not be getting called at installation.

If I manually call srm.exe as follows, it works as hoped i.e. the DLL is registered and my shell extension works.

srm install MyExtension.dll -codebase

I can also see that the registration has been successful via the Server Manager application that comes with SharpShell.

I can also manually uninstall with the following - not that this is particularly relevant to my problem but it at least confirms that the manual methods work:

srm uninstall MyExtension.dll

Here is a fragment of my WXS file. When I run the resultant MSI, the files are installed but the DLL is not being registered; confirmed via SharpShell's Server Manager. Where am I going wrong?

 </Component> <Component Guid="C17BB61F-6471-46F9-AA87-2D14D2456632"> <File Id='srm' Name='srm.exe' DiskId='1' Source='..\MyExtension\packages\SharpShellTools.2.2.0.0\lib\srm.exe' KeyPath='yes'> </File> </Component> <!-- TODO: Insert files, registry keys, and other resources here. --> <!-- </Component> --> </ComponentGroup>
</Fragment>
<Fragment> <CustomAction FileKey="srm" ExeCommand='install "[INSTALLFOLDER]\MyExtension.dll" -codebase' Execute="deferred" Return="check" Impersonate="no" /> <CustomAction FileKey="srm" ExeCommand='uninstall "[INSTALLFOLDER]\MyExtension.dll"' Execute="deferred" Return="check" Impersonate="no" /> <InstallExecuteSequence> <Custom Action="InstallShell" After="InstallFiles"> NOT Installed </Custom> <Custom Action="UninstallShell" Before="RemoveFiles"> (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") </Custom> </InstallExecuteSequence>
</Fragment>

1 Answer

It doesn't look like you have any references to the Fragment with the CustomAction definitions so they are not linked into your final output MSI.

Add a CustomActionRef from your Product element to create the reference.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like