我遇到了一个第三方组件的问题,我必须与C#或C++进行互操作,但无法控制。
情况是这样的:
第三方组件是一种将数据写入“Program Files”文件夹的软件。在Win7中,这意味着对于没有管理员访问权限的用户,此数据将写入配置文件中的虚拟化程序文件文件夹中。我需要通过捆绑的.dll中提供的应用程序接口读取该数据。
当以管理员权限运行第三方工具,并禁用UAC (有效地允许对c:\Program Files的写访问)的框时,我可以使用标准互操作( C++中的LoadLibrary/GetProcAddress或C#中的P/Invoke )从该文件夹读取数据。需要明确的是,在这种情况下,第三方软件和我的工具都使用.dll从C:\Program Files中写入/读取(通过sysinternals的进程监视器进行验证)。
问题是:在启用了UAC的系统上,第三方软件会写入虚拟化文件夹,但我的工具仍然会从C:\Program Files中读取数据,因此我无法读取数据。请注意,我对此没有控制,因为我不能直接读取此数据,我必须通过第三方.dll!所以我想我的问题是:我该怎么做才能让我的程序像第三方组件一样运行,比如在有限的特权下运行时,强制它从VirtualStore中读取?或者我应该以不同的方式来做这件事?
发布于 2012-04-11 17:37:11
对于这种情况,有两种可能的解决方案
按照@Hans Passant
的建议,将UAC部署到与程序文件不同的文件夹中
我们选择了第二个选项,因为第三方工具没有提供更改安装文件夹的脚本化方式:-(
https://stackoverflow.com/questions/9393602
复制相似问题