我有一个旧的应用程序,它直接在“C:\Documents 和 Settings\All Users“。该软件在 Windows 2000 和 Windows XP 下运行良好。但是,自从我们升级到 Windows 7 后,我们在更新这两个文件时就遇到了问题。
经过快速调查,我发现文件的文件权限太严格,我们的应用程序无法正常工作。因此,我尝试更改文件权限以授予用户完全控制权每个人。第一次更新文件时,这种方法运行良好,但在第一次写入后,Windows 7 将文件权限恢复为某些默认值。我还尝试获取“程序数据“文件夹,并再次授予完全控制权每个人,但同样,在第一次写入操作之后,文件权限将恢复为默认设置。
用户帐户控制设置当前设置为“当程序尝试更改我的计算机时通知我(不要使我的桌面变暗)“。如果我将其关闭,问题就会消失。但是,对于使用我们软件的客户来说,这不是一个可行的解决方案。
我无法更改这两个文件的位置。我如何才能授予对位于“程序数据“同时阻止操作系统恢复某些默认权限?
答案1
您无法(直接)执行您想执行的操作。首选方案是更新软件以正确处理路径。但是,您可以使用应用程序兼容性工具包创建一个垫片。
垫片可以做的是,对于那个可执行文件,它可以将所有读取和写入重定向C:\ProgramData
到类似的文件C:\ProgramData\ProgramName
,并且您应该能够在ProgramName
文件夹上设置权限并保存权限。
ACT 是一个复杂的系统,学习难度很高。对于本网站的格式来说,无法详细解释如何设置它,然后创建一个垫片。我建议阅读 MSDN 并尝试自己做,如果您最终遇到任何问题,请回到这里解决您遇到的具体问题。
我还建议检查一下服务器故障当您走出“高级用户”世界并进入“IT 专业人士”世界时,您可以访问此网站来了解有关 ACT 的问题,您可能会在那里找到更好的资源。
答案2
我碰巧找到了一种更适合我的情况的解决方法,因为我无法修改源代码,也无法花费大量时间来了解应用程序兼容性工具包(如 Scott Chamberlain 所建议的)。
在我的案例中,使用符号链接可以节省大量时间/成本。从命令提示符运行以下命令:
move C:\ProgramData\SomeFile.bin C:\Test
mklink C:\ProgramData\SomeFile.bin C:\Test\SomeFile.bin
假设每个需要的用户都对新文件位置具有所需的访问权限(C:\Test
在本例中),那么一切对应用程序来说都是透明的。
正如我提到的,这只是一种解决方法。斯科特的答案是正确的方法。