我一直在试图追踪为什么我的Office2010插件在卸载期间留下空指针异常,而2007版本没有。(编辑:2007年与2010年处于相同状态-失败)
为了缩小范围,我放入了几个eventlog陷阱,这意味着如果代码达到这一点-我应该在eventlog中得到一些东西。没有这样的运气。现在,要么是我写错了eventlog陷阱,要么是代码没有达到那个点。
在customsetuactions - ClickOnceInstaller.cs
public void Uninstall(System.Collections.IDictionary savedState)
{
// write something to eventlog
// This is not being fired, the exception doesn't reach here or writing to eventlog fails.
if (!EventLog.SourceExists("OfficePlugin"))
{
EventLog.CreateEventSource("OfficePlugin", "Application");
}
EventLog.WriteEntry
("OfficePlugin"
, string.Format("Uninstalling: (bug hunting)"), EventLogEntryType.Information);
string deploymentLocation = (string)savedState["deploymentLocation"];
if (deploymentLocation != null)
{
string arguments = String.Format(
"/S /U "{0}"", deploymentLocation);
ExecuteVSTOInstaller(arguments);
}
}
对于ExecuteVSTOInstaller(string arguments)
2007指:string subPath = @"Microsoft SharedVSTO9.0VSTOInstaller.exe";
2010指:string subPath = @"Microsoft SharedVSTO10.0VSTOInstaller.exe";
如果第一个陷阱触发了,这就是我之后放置陷阱的地方。
,
我有另一个方法来处理注册db
RegisterOffice2010AddIn.cs
public void UnRegisterAddIn(string applicationName, string addInName)
{
下一行是与我刚才使用/显示的完全相同的eventlog陷阱。
两者的差异(2007年与2010年)。
private const string UserSettingsLocation =
@"SoftwareMicrosoftOffice12.0User Settings";
和
private const string UserSettingsLocation =
@"SoftwareMicrosoftOffice14.0User Settings";
我想不出还有什么地方可以放置陷阱。我有一个CustomInstaller,它除了Dispose(bool disposing)
和InitializeComponent()
之外什么都不做
发展:
动作开始14:21:00:PublishFeatures.
动作结束14:21:00:发布功能。返回值1.
动作开始14:21:00:PublishProduct.
动作结束14:21:00:PublishProduct。返回值1.
动作开始14:21:00:安装执行。
MSI (c) (B8:BC)[14:21:01:13]:字体已创建。字符集:Req=0, Ret=0,字体:Req=MS Shell Dlg, Ret=MS Shell Dlg错误1001。错误1001。卸载时发生异常。此异常将被忽略,卸载将继续。但是,在卸载完成后,应用程序可能无法完全卸载。-->对象引用未设置为对象的实例。
错误2769:自定义动作_EE8A0D36_BE55_421F_9A55_95470C001D87。卸载未关闭1个MSIHANDLEs。
安装程序在安装此包时遇到意外错误。这可能表明这个包有问题。错误码是2769。参数为:_EE8A0D36_BE55_421F_9A55_95470C001D87。卸载,1,
动作结束14:21:05:安装执行。返回值3.
操作结束14:21:06:INSTALL。返回值3。
谷歌错误2769 -给出了"[TARGETDIR]"的答案,但我不引用TARGETDIR,我引用deploymentLocation。是的,我试过在我能想到的地方加上""。包括安装程序-注册表- HKLMSoftwareMSOffice12.0等…添加Excel/Word/Outlook和Manifest键值。没有反馈,不管是好是坏,错误还是其他。我不知道还有什么办法能找到这个人。
我猜它是指这个,在VDPROJ:
{
"Name" = "8:UnregisterOutlookAddIn"
"Condition" = "8:"
"Object" = "8:_73E71A44EB72485AB7367745F7D57F49"
"FileType" = "3:1"
"InstallAction" = "3:4"
"Arguments" = "8:"
"EntryPoint" = "8:"
"Sequence" = "3:3"
"Identifier" = "8:_EE8A0D36_BE55_421F_9A55_95470C001D87"
"InstallerClass" = "11:TRUE"
"CustomActionData" = "8:/addinName="Outlook2010AddIn 前景/应用程序= "
}
我发现它抛出了两个异常-次要在CustomSetupActions和UnregisterAddIn和主要在ClickOnceInstaller和Uninstall下。我怎么把它们说成是次要的和主要的?它会在CustomAction中执行异常然后在ClickOnce中执行终止异常。我已经消除了CustomActions中的一个,现在我只需要担心ClickOnce。从我收集到的信息来看,ClickOnce实现了安装项目中指定的接口(安装、回滚、提交、卸载)。我只需要弄清楚它是如何在卸载方法中出错的。
免责声明:除非我错了,我找错对象了。
改为WiX。它成为了一种变通方法,因为原来的仍然是正确的。