我已经创建了一个Outlook加载项,它工作正常,我通过MSI部署它并正确注册DLL。
我一直在更新它并同等地增加程序集和安装项目的内部版本号,但是当我安装MSI作为升级到以前的版本时,我现在有一个奇怪的问题。
Install 2.6 works
Install 2.7 works
Install 2.8 works
Upgrade 2.6 -> 2.7 works
Upgrade 2.6 - 2.8 (not sure haven't tried yet)
Upgrade 2.7 -> 2.8 installs files but doesn't register dll
Repair 2.8 after an upgrade install and it registers the dll correctly
Manually register the 2.8 assembly after upgrade install and the plugin works fine.
如果我在Visual Studio 2010之外编辑MSI并将RemoveExistingProducts的顺序更改为更高,那么2.7 - > 2.8安装工程。
我只是不明白为什么现在没有正确注册。
答案 0 :(得分:0)
仍然没有100%确定它为什么有效,然后它没有。但是我现在在互联网上的某个地方有礼貌地工作,我忘记了书签。
我将以下VBS代码添加为后期构建操作。
PostBuildEvent
cscript "$(ProjectDir)fixRemovePreviousVersions.vbs" "$(BuiltOuputPath)"
VBS脚本
Dim objInstaller
Dim objDatabase
Dim objView
Dim objResult
Dim strPathMsi
If WScript.Arguments.Count <> 1 Then
WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>"
WScript.Quit -1
End If
strPathMsi = WScript.Arguments(0)
Set objInstaller = CreateObject("WindowsInstaller.Installer")
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1)
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'")
WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'"
objView.Execute
objDatabase.Commit
WScript.Quit 0