如何在VB6中为非管理员用户设置文件权限?
我有一个用vb6编写的旧更新程序,它作为管理员运行。但是,由于它以管理员身份运行,因此它下载和保存的所有文件对其他用户都是只读的。甚至是公共场所的文件,如共享应用程序数据文件夹(我正在保存有问题的文件) 我很幸运在“vista兼容版”发布之前找到了这个。Vista通过将非管理员写入和未来读取重定向到sortof“虚拟”文件夹来隐藏问题。但下一次更新可能会替换该文件,非管理员程序仍将转到虚拟文件夹并使用旧文件如何在VB6中为非管理员用户设置文件权限?,vb6,file-permissions,Vb6,File Permissions,我有一个用vb6编写的旧更新程序,它作为管理员运行。但是,由于它以管理员身份运行,因此它下载和保存的所有文件对其他用户都是只读的。甚至是公共场所的文件,如共享应用程序数据文件夹(我正在保存有问题的文件) 我很幸运在“vista兼容版”发布之前找到了这个。Vista通过将非管理员写入和未来读取重定向到sortof“虚拟”文件夹来隐藏问题。但下一次更新可能会替换该文件,非管理员程序仍将转到虚拟文件夹并使用旧文件 作为管理员用户,如何允许其他用户完全控制我在vb6中写入的文件?不一定是谁写入文件,而是
作为管理员用户,如何允许其他用户完全控制我在vb6中写入的文件?不一定是谁写入文件,而是他们将文件写入何处。默认情况下,“程序文件”文件夹及其子文件夹对所有标准用户都是只读的。尝试改用“所有用户”应用程序数据文件夹 这对于VB6来说有点棘手,因为它在设计时根本没有考虑Vista。一些相关文件夹被重新命名,我不知道如何让vb6为您提供所需的确切文件夹,除非使用“Declare Function”别名直接调用windows API 因此,我知道找到合适位置的最简单可靠方法是使用
%ALLUSERSPROFILE%
环境变量。在XP上默认返回“C:\Documents and Settings\All Users
”,在Vista上默认返回“C:\ProgramData
”。从那里您可以查找“应用程序数据”文件夹。它不会在那里,你也不需要它在Vista上,但如果它不存在,创建一个不会有任何伤害。这将为两个系统提供一致的文件夹结构,您可以从中创建应用程序的子文件夹用作工作空间
最后一点注意:这不是Vista的新变化。默认情况下,程序文件文件夹对标准用户始终是只读的。XP也以同样的方式工作。只是有这么多人在XP中以管理员身份运行,你可能会侥幸逃脱。不一定是谁写的文件,而是他们在哪里写的文件。默认情况下,“程序文件”文件夹及其子文件夹对所有标准用户都是只读的。尝试改用“所有用户”应用程序数据文件夹 这对于VB6来说有点棘手,因为它在设计时根本没有考虑Vista。一些相关文件夹被重新命名,我不知道如何让vb6为您提供所需的确切文件夹,除非使用“Declare Function”别名直接调用windows API 因此,我知道找到合适位置的最简单可靠方法是使用
%ALLUSERSPROFILE%
环境变量。在XP上默认返回“C:\Documents and Settings\All Users
”,在Vista上默认返回“C:\ProgramData
”。从那里您可以查找“应用程序数据”文件夹。它不会在那里,你也不需要它在Vista上,但如果它不存在,创建一个不会有任何伤害。这将为两个系统提供一致的文件夹结构,您可以从中创建应用程序的子文件夹用作工作空间
最后一点注意:这不是Vista的新变化。默认情况下,程序文件文件夹对标准用户始终是只读的。XP也以同样的方式工作。只是有这么多人在XP中以管理员身份运行,你也许可以侥幸逃脱。我这样做的方式是让它成为安装人员的责任 使用VSI 1.1为应用程序创建安装程序MSI。在CommonAppDataFolder下创建应用程序数据文件夹 作为生成后步骤,运行脚本以执行以下操作:
FILE\u ALL\u访问权限
您的程序可以使用Shell Automation对象或通过调用Shell32作为标准DLL(使用Declare函数或TLB)来定位文件夹。我这样做的方式是让它成为安装程序的责任 使用VSI 1.1为应用程序创建安装程序MSI。在CommonAppDataFolder下创建应用程序数据文件夹 作为生成后步骤,运行脚本以执行以下操作: