0

我制作了一个 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 并将 RemovingExistingProducts 的顺序更改为更高,则 2.7 -> 2.8 安装有效。

我只是不明白为什么它现在没有正确注册。

4

1 回答 1

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
于 2013-06-21T08:39:49.917 回答