2009-08-30 131 views
15

我有限的用户,我需要编写暴露在Outlook 2003中的C#库和2007年COM互操作不regasm

我没有任何管理privilges可言,甚至没有在宏观展望安装时间,所以我不能运行RegAsm,我不能(我假设)编写一个托管加载项。

在这种情况下,有没有办法从VBA中调用.Net代码,还是有其他解决方案?

这是仅供个人使用,所以一个丑陋的黑客是完全可以接受的(只要它的作品)

回答

14

我通过运行regasm/regfile选项解决了这个问题,并在生成的.reg文件中用HKCU取代HKLM。

+0

我使用这种方法时得到的regasm输出不包含任何HKLM密钥,只有HKEY_CLASSES_ROOT,这也需要管理员权限才能写入。你是否也找到了解决办法,或者我的情况与你的情况截然不同? – 2011-11-26 21:03:57

+1

嘿......没关系,我发现它:HKCU \ Software \ Classes – 2011-11-26 21:06:33

+0

你把DLL放在用户机器上的哪个位置?它不需要运行gacutil(需要管理员权限)吗? – 2014-04-14 13:54:38

1

不幸的是,由于该COM工作就不可能安装一个COM对象(互操作或其他方式)没有管理员权限。

当您注册com对象时,它将多个条目写入HKEY_CLASSES_ROOT这是一个机器级别密钥,因此需要管理员权限。

现在,因为您确实说过可以接受一个骇人的解决方案,您可以采取一些可行的步骤来实现它;但是,如果您没有管理员权限,我假设这不是您的机器,并且很可能是工作机器。采取这些措施很可能会让你被解雇。标准免责声明和不适用:如果你是一个白痴并且自己被起诉/解雇/枪杀/抢劫/等等,那不是我的错。

首先,您需要找出需要添加的注册表项。确保你在一台'干净'的机器上这样做,而这台机器以前没有看到过你的组件(或者你知道没有注册表项)。安装机器监控程序来捕获密钥。 Here是一个链接到[无关] MS文章,他们推荐一些应用程序来做到这一点。

现在随着显示器的运行安装你的插件。您现在应该能够获得需要创建哪些密钥的日志。使用你的日志创建注册表导出文件。

现在这里变得棘手。基本上你要做的是从BartPE镜像启动机器并挂载注册表并运行你的脚本;然而,关键路径将不正确,因此脚本无法“开箱即用”。

MS有一个TechNet文章(但链接有parens,所以它在这里播放不好)所以Google它,它应该是第一个结果。

阅读完该文章后,您将看到机器注册表将作为HKEY_LOCAL_MACHINE的子项安装。您需要做的是更改注册表导出以匹配新路径。只要此步骤完成,您应该能够从您的BartPE映像引导,安装注册表,然后导入您的脚本,卸载配置单元,然后重新启动。假设你将文件复制到正确的路径,那么它'应该'工作。

祝你好运。

+0

无注册COM或HKCU \ CLASS? – SLaks 2009-09-09 18:01:48

+4

我没有办法做这个解决方案。 – SLaks 2009-09-10 21:14:12

+0

我以为你会想要使用它,但把信息发送给其他黑客。注册免费COM是什么意思?您可以使用HKCU \ Classes,因为COM仍然需要HKLM中的条目。 – 2009-09-11 15:03:56

1

我发现了一个可能的solution,但我还没有时间去尝试它。

4

注册COM对象(例如ActiveX控件)并使其对系统中的所有用户都可见需要管理权限。

但是,如果不需要所有用户的可视性(或由于受限用户限制而不可能),则只能为特定用户注册COM对象。

这通常通过在HKCU而不是HKLM中注册对象来完成。这将适用于“常规”COM对象以及通过.NET COM Interop公开的对象。

其他更细粒度的方法也退出了,已经提到的RegFree COM解决了一个特定的可执行文件。

因此,考虑到上述所有解决方案,将所有信息捕获到reg文件并用HKCU取代HKLM应该可行(不好,但工具也是如此)。

+0

我已经这样做了。 – SLaks 2010-03-23 13:38:21

4

RegistrationServices.RegisterAssembly .NET API(我相信这是使用RegAsm.exe)。

还有RegOverridePredefKey的Win32 API,不起眼但非常有用的,它允许重新映射HKEY_CLASSES_ROOT(由RegisterAssembly使用)HKEY_CURRENT_USER\Software\Classes

一个聪明的程序可以使用RegistrationServices.RegisterAssemblyRegOverridePredefKeyHKEY_CURRENT_USER下的COM客户端注册程序集。

我还没有尝试过这个,但我相信这是相当可行的。

更新,显然这种方法does works

+1

这是一个有趣的想法。我会试一试。 – 2014-04-15 08:43:01