我有一个用vb6编写的旧更新程序,它以管理员身份运行。但是,因为它以管理员身份运行,所以它下载和保存的所有文件对其他用户都是只读的。甚至公共场所的文件,例如共享应用程序数据文件夹(我正在保存有问题的文件)。
我很幸运,我在“vista兼容”发布之前发现了这一点。 Vista通过将非管理员写入和将来的读取重定向到一个“虚拟”文件夹来隐藏此问题。但是下一次更新可能会替换该文件,非管理员程序仍将转到虚拟文件夹并使用旧文件。
作为管理员用户,如何让其他用户完全控制我在vb6中编写的文件?
答案 0 :(得分:2)
我这样做的方法是让它成为安装员的责任。
使用VSI 1.1为您的应用程序创建安装程序MSI。在CommonAppDataFolder下创建一个应用程序数据文件夹。
作为构建后步骤,运行脚本以执行以下操作:
FILE_ALL_ACCESS
。就是这样。
您可以这样做,或使用VSI 1.1,然后使用Orca编辑MSI,或者可能使用第三方MSI创作工具,这些条目可以通过其GUI设置,并可以保存在Installer项目中。我只是使用在每个VSI 1.1构建之后运行的小型WSH脚本。
AFAIK这是根据Windows应用程序指南完成此类操作的推荐方法。如果您的需求更加漂亮,您可以使用多个子目录或子子目录,其中一些允许完全访问,一些只读,等等。
您的程序可以使用Shell Automation对象找到该文件夹,也可以将Shell32作为标准DLL(使用Declare Function或TLB)调用。
答案 1 :(得分:1)
不一定是谁写文件,而是写入文件的位置。默认情况下,程序文件文件夹及其子文件夹对所有标准用户都是只读的。请尝试使用“所有用户应用程序数据”文件夹
这对于VB6来说有点棘手,因为它完全没有考虑到Vista的设计。一些相关的文件夹被重新命名,我无法让vb6给你一个你想要的确切文件夹,而不是使用“Declare Function”别名来直接调用windows API。
因此,我知道找到合适位置的最简单可靠方法是使用%ALLUSERSPROFILE%
环境变量。默认情况下,在XP上返回“C:\Documents and Settings\All Users
”,默认情况下在Vista上返回“C:\ProgramData
”。从那里,您可以查找“Application Data”文件夹。它不会存在,你不需要它在Vista上,但如果它不存在则创建一个不会伤害任何东西。这为您提供了两个系统上一致的文件夹结构,您可以从中创建一个子文件夹,供您的应用程序用作工作空间。
最后一点说明:这不是Vista的新变化。默认情况下,Program Files文件夹始终对标准用户是只读的。 XP以同样的方式工作。只是有很多人在XP中作为管理员运行,你可能会逃脱它。