我有限的用户,我需要编写暴露在Outlook 2003中的C#库和2007年COM互操作不regasm
我没有任何管理privilges可言,甚至没有在宏观展望安装时间,所以我不能运行RegAsm,我不能(我假设)编写一个托管加载项。
在这种情况下,有没有办法从VBA中调用.Net代码,还是有其他解决方案?
这是仅供个人使用,所以一个丑陋的黑客是完全可以接受的(只要它的作品)
我有限的用户,我需要编写暴露在Outlook 2003中的C#库和2007年COM互操作不regasm
我没有任何管理privilges可言,甚至没有在宏观展望安装时间,所以我不能运行RegAsm,我不能(我假设)编写一个托管加载项。
在这种情况下,有没有办法从VBA中调用.Net代码,还是有其他解决方案?
这是仅供个人使用,所以一个丑陋的黑客是完全可以接受的(只要它的作品)
我通过运行regasm
和/regfile
选项解决了这个问题,并在生成的.reg
文件中用HKCU取代HKLM。
不幸的是,由于该COM工作就不可能安装一个COM对象(互操作或其他方式)没有管理员权限。
当您注册com对象时,它将多个条目写入HKEY_CLASSES_ROOT
这是一个机器级别密钥,因此需要管理员权限。
现在,因为您确实说过可以接受一个骇人的解决方案,您可以采取一些可行的步骤来实现它;但是,如果您没有管理员权限,我假设这不是您的机器,并且很可能是工作机器。采取这些措施很可能会让你被解雇。标准免责声明和不适用:如果你是一个白痴并且自己被起诉/解雇/枪杀/抢劫/等等,那不是我的错。
首先,您需要找出需要添加的注册表项。确保你在一台'干净'的机器上这样做,而这台机器以前没有看到过你的组件(或者你知道没有注册表项)。安装机器监控程序来捕获密钥。 Here是一个链接到[无关] MS文章,他们推荐一些应用程序来做到这一点。
现在随着显示器的运行安装你的插件。您现在应该能够获得需要创建哪些密钥的日志。使用你的日志创建注册表导出文件。
现在这里变得棘手。基本上你要做的是从BartPE镜像启动机器并挂载注册表并运行你的脚本;然而,关键路径将不正确,因此脚本无法“开箱即用”。
MS有一个TechNet文章(但链接有parens,所以它在这里播放不好)所以Google它,它应该是第一个结果。
阅读完该文章后,您将看到机器注册表将作为HKEY_LOCAL_MACHINE
的子项安装。您需要做的是更改注册表导出以匹配新路径。只要此步骤完成,您应该能够从您的BartPE映像引导,安装注册表,然后导入您的脚本,卸载配置单元,然后重新启动。假设你将文件复制到正确的路径,那么它'应该'工作。
祝你好运。
我发现了一个可能的solution,但我还没有时间去尝试它。
注册COM对象(例如ActiveX控件)并使其对系统中的所有用户都可见需要管理权限。
但是,如果不需要所有用户的可视性(或由于受限用户限制而不可能),则只能为特定用户注册COM对象。
这通常通过在HKCU而不是HKLM中注册对象来完成。这将适用于“常规”COM对象以及通过.NET COM Interop公开的对象。
其他更细粒度的方法也退出了,已经提到的RegFree COM解决了一个特定的可执行文件。
因此,考虑到上述所有解决方案,将所有信息捕获到reg文件并用HKCU取代HKLM应该可行(不好,但工具也是如此)。
我已经这样做了。 – SLaks 2010-03-23 13:38:21
有RegistrationServices.RegisterAssembly
.NET API(我相信这是使用RegAsm.exe
)。
还有RegOverridePredefKey
的Win32 API,不起眼但非常有用的,它允许重新映射HKEY_CLASSES_ROOT
(由RegisterAssembly
使用)HKEY_CURRENT_USER\Software\Classes
。
一个聪明的程序可以使用RegistrationServices.RegisterAssembly
和RegOverridePredefKey
为HKEY_CURRENT_USER
下的COM客户端注册程序集。
我还没有尝试过这个,但我相信这是相当可行的。
更新,显然这种方法does works。
这是一个有趣的想法。我会试一试。 – 2014-04-15 08:43:01
我使用这种方法时得到的regasm输出不包含任何HKLM密钥,只有HKEY_CLASSES_ROOT,这也需要管理员权限才能写入。你是否也找到了解决办法,或者我的情况与你的情况截然不同? – 2011-11-26 21:03:57
嘿......没关系,我发现它:HKCU \ Software \ Classes – 2011-11-26 21:06:33
你把DLL放在用户机器上的哪个位置?它不需要运行gacutil(需要管理员权限)吗? – 2014-04-14 13:54:38