我有一个用于32位应用程序(使用MakeMsi构建,最初用于Windows XP,并自此之后进行简单维护)的安装程序包,无法注册COM服务器在现代(64位)Windows系统上(7,8,10)。这是我看到想正常安装MSI我时:避免将MSI带入兼容模式“以前的Windows版本”
应用程序错误
异常EOleSysError模块XYZ在000F0B01。访问OLE注册表时出错。
如果我把MSI在兼容模式以前的Windows的版本中,COM服务器注册成功。由于“它正在工作”不知何故,我没有花费太多时间探索迄今的原因。但最后,我已经精疲力竭地记住我们的客户(有时候也是我)在这个先决条件中的一次又一次,所以我想解决这个问题。
登记(并且注销)经由CustomAction S DONE,在我寻找到它使用奥卡:
"[INSTALLDIR.MYAPP]\placeholder.exe" -regserver
"[INSTALLDIR.MYAPP]\placeholder.exe" -unregserver
对于每个那些条目,Type
是1122
和Source
是INSTALLDIR.MYAPP
。
我可以想象,COM服务器在安装过程中启动时权限不足,但不是安装程序自动运行的管理员权限?我的意思是,当我(作为标准用户)通过双击启动安装程序时,它会在之前显示UAC提示进行实际安装。为什么COM服务器不能以提升的注册和注销权利运行?它令人困惑...
我应该如何更改我的MSI以使Windows安装程序成功处理它?
事实上,自我注册在MSI软件包中非常不受欢迎,原因如下(请阅读https://msdn.microsoft.com/en-us/library/windows/desktop/aa371608.aspx)。我只在没有其他选择时才使用它(几个极其古老的第三方OCX控件,它们极力阻止我确定他们在注册表中写入的密钥) –
写完问题后,我偶然发现这篇文章正是这样说的:[*'使用自注册是非常强烈的不鼓励微软,应该不惜一切代价避免。* *(https://www.firegiant.com/wix/tutorial/com-expression-syntax- miscellanea/components-of-a-different-color /)现在我确定这是我的问题。你有没有想过如何获得不属于VS解决方案的COM服务器(exe)的注册表项?我的意思是,除了在体外自我注册之前和之后对注册表进行区分? – Wolf
关于*问题出现在可执行文件中*:我认为这个可执行文件最有可能是正确的,但是权限并不适合。如果我开始自我注册的exe文件,我必须使用管理员权限来执行此操作。 (当然,我认为自行注册并不是安装时的正确选择。) – Wolf