我们在使用启用UAC的应用程序时遇到了严重的问题。
安装完成后(安装程序几乎立即使用UAC失败),似乎可以打开UAC并使应用程序正常工作。但是,过了一段时间,它将停止处理奇怪的错误,无法找到它刚刚创建的文件。
为了得到这个:
XP as admin: Fine XP as limited user: Fine Vista no UAC admin: Fine Vista no UAC limited: Fine Vista UAC admin: FAIL Vista UAC limited: FAIL
该软件在任何地方都不包含任何权限检查。如果我正确理解文档,那么作为有限用户工作的任何东西都应该与UAC一起工作;然而事实证明并非如此。
编辑:我必须为问题问题而不是原来的问题而道歉。事实上,我们在文件夹虚拟化中发现了至少一个错误,并认为还有更多错误。此时,让它运行的唯一合理希望是找到一个可以作为受限用户执行的API调用,该调用禁用调用进程的文件夹虚拟化及其产生的任何进程(递归)。我们不能只添加清单的原因是该软件调用第三方软件,每台机器可能会有所不同。答案 0 :(得分:4)
在Windows Vista上查找文件系统和注册表的虚拟化。如果您的应用程序使用文件系统和/或注册表的某些部分,您会发现您的应用程序“正常” - 也就是说,API成功且没有错误 - 但该数据未存储在您期望的位置。特别是,在一台计算机上的多个用户之间共享的许多区域现在已经超出范围,并且数据实际上进入了某个特定于当前用户的存储。您只会在一段时间后发现用户实际上并没有共享相同的数据。
有一种方法可以阻止虚拟化的发生。为您的应用程序提供一个清单文件,说明它知道UAC,如此处所述...... http://msdn.microsoft.com/en-us/library/bb756929.aspx
具体要求清单文件中要求的权限级别无关紧要。仅仅存在它表示您的应用程序了解UAC并且操作系统不会尝试聪明并虚拟化对文件系统或注册表的“特权”区域的访问。如果您没有必要的权限来访问这些内容,API调用将会失败,并且您将更容易调试。
答案 1 :(得分:2)
在这段时间之后,我找到了一个有效的解决方案。
安装Program Files以外的其他地方。这整齐地回避了似乎导致所有问题的文件系统虚拟化。
禁用应用程序的HLKM注册表项上的虚拟化。这修复了一个涉及系统更新的剩余故障。
参考资料: http://msdn.microsoft.com/en-us/library/aa965884%28VS.85%29.aspx
答案 2 :(得分:1)
应用程序在哪里尝试写入文件?如果它试图在Program Files下写入它的安装位置,你可能会遇到奇怪的错误,因为在Vista下不允许写这里,而且这里创建的任何文件实际上是在其他地方的虚拟文件夹中创建的 - 尽管它们(通常)看起来像应用程序在它期望的地方。
您可能想尝试在XP兼容模式下运行该应用程序。