-1

我在 Excel 中有一个加载项,需要在 HKEY_LOCAL_MACHINE 注册表中存储一些数据。由于 Windows Vista 及更早版本中的 UAC 控件,我添加了一个清单文件。但这只是行不通。我什至在我的解决方案的每个项目中都添加了清单。我的解决方案中有 5 个项目(3 个 VB 项目、1 个 c++ 和 1 个部署)。

我正在使用VS2005。我将清单文件添加到项目中(将 requestedExecutionLevel 设置为“requireAdministrator”并使用 mt.exe 在构建后命令中嵌入清单。即便如此,我仍然拒绝访问 HKEY_LOCAL_MACHINE。唯一的事情当我以“以管理员身份运行”启动 Excel 时,这是有效的。

任何线索可能是什么问题?谢谢。

4

1 回答 1

1

DLL 中的清单不影响应用程序的执行级别,在这种情况下它是excel.exe.

以下是您的选择:

  • 以管理员身份运行 Excel;
  • 修改加载项以写入 HKCU 而不是 HKLM。

如果您需要存储可供其他用户使用的数据,请考虑使用ProgramData文件夹 (CSIDL_COMMON_APPDATAFOLDERID_ProgramData)。然后你的插件在里面创建一个子目录ProgramData并修改它的权限,这样这个新目录就可以被任何人写(默认情况下,只有创建文件夹的用户帐户有写权限,其他用户只能读)。


还有一些其他选项:

  • 您可以编写一个服务,您的附加组件将与之通信以将数据写入 HKLM,但事实并非如此。
  • 您可以创建一个提升的 COM 对象,它将数据写入 HKLM。

尽管用户不希望 Excel 在运行时需要提升,因此请考虑更改您的逻辑,以便您的加载项根本不需要提升。

于 2013-02-03T16:59:56.490 回答