当前位置: 首页 > 知识库问答 >
问题:

使用不同帐户连接到计算机时未注册DLL

公孙栋
2023-03-14

我正在将VSTO OUTLOOK加载项从32位迁移到64位。它在Office 2007 32位上运行良好。目标是使其在Office 365 64位上运行。

我已经重新编译了64位平台形式的外接程序,并更新了安装屏蔽项目。

当我使用我的帐户(我有管理员权限)在新的Windows 10计算机上安装外接程序时,它工作正常。我可以在Outlook中看到它,并且可以使用它。

但是,如果我退出并要求其他人在保存机器上登录(这个人也有管理员特权),加载项显示在Outlook中,但当用户使用它时,会显示此错误:

系统运行时。互操作服务。COMException(0x80040154):检索CLSID为{29AB7A12-B531-450E-8F7A-EA94C2F3C05F}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。

有想法吗?

详情:

>

  • 此加载项仅使用一个外部DLL:来自Redemption的64位DLL。
  • 解决方案已在Visual Studio 2015中编译。平台目标:x64。
  • 要在计算机上安装它,我使用在Visual Studio 2015上使用InstallShield Express创建的MSI。
  • 在InstallShield中,我指定了ALLUSERS-1(每台机器安装)。
  • 使用以下代码注册DLL:

    昏暗WshShell

    设置WshShell=CreateObject(“Wscript.Shell”)

    该死。运行“regsvr32/s”“C:\Program Files(x86)\MyCompany\AddInName\Redemption64.dll”

    设置WshShell=nothing

  • 共有1个答案

    乐正乐湛
    2023-03-14

    实际步骤:只是在顶部尝试了一个实用的摘要:1:当作为第二个用户登录时,尝试启动regedit。exe并导出HKCR(也可能是HKCU),然后注册COM dll,再次导出,并使用合适的diff工具进行diff(如果启动完全有效)<代码>2:下载ProcMon。exe并监视应用程序/加载项启动,以确定发生了什么<代码>3:使用Visual Studio,逐步查看并检查模块视图,以确定启动期间发生了什么<代码>4:使用oleview。exe查看COM文件需要什么注册(打开embedded typelib)<代码>文件=

    快速检查:可能先检查一下:Outlook Redemption-使用RedemptionLoader而不使用regsvr32 DLL。

    另外,在第二个用户登录之前,您是否关闭了所有功能?还是你只是换了用户?也许两者都可以尝试,确保你的第一次登录没有加载或锁定任何内容。

    下面的“注册调试”可能未达到目标。看起来这可能是更奇怪的事情。也许只是浏览一下。

    部署助记符:可以试试这个部署助记符。一小段提醒你如何思考如何解决部署问题:“什么是锁定,什么是阻塞,什么是缺失,等等……”

    注册:虽然这看起来像是一个简单的缺少注册,但它可能是更奇怪的东西。我有一个应用程序启动检查列表,你可以浏览一下。不是为加载项写的,但可能会给你一些想法。

    >

  • regsvr32.exe:您是否尝试以第二个用户的身份手动运行regsvr32.exe来检查这是否有效?虽然每个用户都可以注册一个COM文件,但我不知道使用regsvr32.exe来做到这一点的可靠方法。
  • ProcMon.exe:你熟悉使用ProcMon.exe吗?她是一个基本的例子。汉瑟曼展示了它是如何完成的(YouTube)。你可以用它来尝试确定什么时候失败了。需要一些练习才能有效使用,但这是我的“第一个也是最后一个手段”。
  • Visual Studio:我喜欢使用Visual Studio来逐步完成代码,并查看不同的窗口(例如模块),以了解应用程序是如何工作的,从而确定启动过程中可能出现的错误。
  • oleview.exe:要弄清楚COM文件在自注册期间注册了什么,有几种方法。用管理员权限启动oleview.exe,然后执行File=

    RegSpy2.exe:或者,您可以使用RegSpy2.exe进行COM注册提取。请参见此处的示例。

    自注册:不建议对COM注册进行自注册,如下所述:MSI注册dll-自注册被视为有害。在Installshield中,只需在构建时提取COM数据即可注册COM文件,如下图所示。通过将“.NET COM Interop”标志设置为yes,也可以在同一列表中启用COM Interop注册:

    https://imgs.xnip.cn/cj/n/38/cb23f104-5168-4caa-9db3-3b08bf095db7.png" width="100%" height="100%" />

    COM互操作:. NET程序集可以使用regasm.exe注册为COM使用。这(几乎)与上面提到的. NET COM互操作设置设置为"yes"相同。如果您想使用来自. NET的COM文件,您需要生成一个互操作程序集文件,然后安装和注册真正的COM文件(您可以这样做)。这两个操作都必须执行。

    插入几个链接。这些(古代)文章涉及regasm.exetlbexp.exetlbimp.exegacutil.exe的使用。您不需要,但留下供参考:

    • 从调用COM组件。净客户
    • 打电话给警察。NET组件从COM组件中删除

    一些链接:

    • 向WIX注册COM EXE
    • 使用Wix Msi安装程序在安装后将CPP dll注册到COM中
    • 使用“Visual studio安装程序”创建的安装程序安装应用程序后,应用程序无法打开

  •  类似资料:
    • 我尝试使用JSCH连接到远程windows计算机,连接成功。 我也尝试停止cygwin服务,但连接不成功。 我想连接到一个没有安装cygwin的远程windows机器,并使用java在命令提示符中执行命令。 我有机会查看Psexec工具,但安全性受到了冲击。 有人能建议一些其他的想法来连接到远程windows机器使用Java并执行命令吗?

    • 我见过几个与这个话题有关的问题和答案,但我一直无法掌握如何做。 > 我所能做的:使用Python脚本(使用Paramiko)连接到远程计算机,并返回信息,例如,ping交换机: ssh=pk.sshclient() ssh.connect(“{}”.format(IP),port=xxx,username='xxx',password='xxx') stdin,stdout,stderr=\“ s

    • 如果我从命令行创建RMI注册表,则客户端将对象绑定到注册表没有问题。 但是,如果我使用启动RMI注册表,它会出错。 这是我使用创建的代码 当我尝试绑定到我自己的RMI注册表时,我因使用而遇到的错误 是一个接口 有什么想法吗?

    • 我正在尝试使用ngrok通过SSH(公钥认证)从远程计算机通过互联网连接到Windows用户。但显然不起作用。 以下是我所做的。 我在windows上安装并激活了SSH。 我生成了公钥文件,并从发送到远程机器进行ssh。 我在SSH设置文件“C:\ProgramData\SSH\sshd\u config”中更改/添加了以下行 我重新启动了ssh服务器以应用设置更改。 我安装了ngrok并运行ng

    • 在 Corda 帐户库中,为了将帐户的主机“所有权”从一个节点更改为另一个节点,需要将处于 AccountInfo 状态的更改为新主机(节点),并共享与此帐户相关的所有保管库状态。 AccountInfo没有更新命令(AccountInfos命令),这意味着您无法在创建主机后更改主机。 < li >此功能是否因任何原因被排除?是否有计划引入更新命令(以及支持流)? < li >移动/转移(主机所有

    • 使用USB连接线连接个人计算机和PSP™ 可连接个人计算机和PSP™,再将档案从个人计算机复制至Memory Stick™或主机内存。要从PS3™复制档案时亦可使用相同方法。 使用USB连接线,连接PSP™和个人计算机。要将档案复制至Memory Stick™时,需先将Memory Stick™正确插入PSP™内。 其他方法 使用卡片阅读机 从PSP™取出Memory Stick™后,可使用市售的