19

我是一个受限用户,我需要编写一个 Outlook 宏来公开 Outlook 2003 和 2007 中的 C# 库。

我根本没有任何管理员权限,甚至在安装时也没有,所以我无法运行 RegAsm,也无法(我假设)编写托管加载项。

在这种情况下,有什么方法可以从 VBA 调用 .Net 代码,还是有其他解决方案?

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

4

5 回答 5

17

我通过运行regasm该选项解决了这个问题,并在结果文件/regfile中用 HKCU 替换了 HKLM 。.reg

于 2009-10-23T12:07:05.580 回答
8

RegistrationServices.RegisterAssembly.NET API(我相信它被 .NET API 使用RegAsm.exe)。

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

一个聪明的程序可以同时使用RegistrationServices.RegisterAssemblyRegOverridePredefKeyHKEY_CURRENT_USER.

我自己没有尝试过,但我相信它是可行的。

更新,显然这种方法确实有效

于 2014-04-15T07:21:26.937 回答
5

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

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

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

其他更细粒度的方法也存在,已经提到的 RegFree COM 可以解决特定的可执行文件。

因此,鉴于上述所有情况,将所有信息捕获到 reg 文件中并用 HKCU 替换 HKLM 的解决方案应该可以工作(不是很好,但工具也是如此)。

于 2010-03-22T18:27:54.590 回答
1

我找到了一个可能的解决方案,但我还没有时间尝试。

于 2009-09-09T18:12:51.900 回答
0

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

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

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

首先,您需要找出需要添加哪些注册表项。确保您在一台“干净”的机器上执行此操作,该机器以前没有见过您的组件(或者您知道没有 reg 键的主机)。安装机器监控程序以捕获密钥。 是一个 [不相关] MS 文章的链接,他们在其中推荐了一些可以做到这一点的应用程序。

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

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

MS 有一篇 TechNet 文章(但链接中有括号,所以在这里效果不佳)所以谷歌它,它应该是第一个结果。

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

祝你好运。

于 2009-09-09T15:47:56.067 回答