【问题标题】:UAC Manifest file in VS2005 not workingVS2005中的UAC清单文件不起作用
【发布时间】:2013-01-17 21:30:03
【问题描述】:

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

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

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

【问题讨论】:

  • 这个不行,只有EXE的manifest会起作用。你不能合理地弄乱 Excel.exe。写入 HKCU 或更改要写入的 HKLM 密钥的安全设置。急需联系微软支持,本站有服务保障。
  • 嗨,汉斯,感谢您的快速回答。这正是我的问题。有没有办法在启动 excel 后提升加载项并使 excel 知道该提升? (似乎并非如此)或者唯一的方法是将 Excel 启动为提升?再次感谢
  • 不,只能提升一个进程。加载项无法强制提升,它必须处理为 EXE 决定的任何策略。期望用户启动 Excel 提升是不合理的。他们会忘记,Excel 通常是一个备受瞩目的攻击目标。更改注册表项安全设置是最简单且影响最小的解决方法。
  • 是的。我完全同意你的观点,最简单的方法是将其存储在 HKCU 中。但我正在存储需要对所有用户可用的数据,而不仅仅是当前用户。有任何想法吗 ?谢谢
  • 您可以让加载项检测到它需要提升并让它以适当的提升重新启动 Excel。通过一些技巧,您甚至可以重新加载所有打开的文档...

标签: excel windows-7 visual-studio-2005 add-in uac


【解决方案1】:

DLL 中的清单不影响应用程序的执行级别,在本例中为excel.exe

以下是您的选择:

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

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


还有一些其他的选择:

  • 您可以编写一个服务,您的插件将与之通信以将数据写入 HKLM,但事实并非如此。
  • 您可以创建一个elevated COM object,它将数据写入 HKLM。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多