首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在VB6中为非管理员用户设置文件权限?

如何在VB6中为非管理员用户设置文件权限?
EN

Stack Overflow用户
提问于 2009-09-02 20:36:09
回答 2查看 3.6K关注 0票数 0

我有一个用vb6编写的旧的更新程序,它以管理员身份运行。但是,因为它是以管理员身份运行的,所以它下载和保存的所有文件对其他用户都是只读的。甚至是公共场合的文件,比如共享应用程序数据文件夹(这是我保存文件的地方)。

我很幸运在‘vista兼容’发布之前找到了这个。Vista通过将非管理员写入和未来读取重定向到某种“虚拟”文件夹来隐藏该问题。但下一次更新可能会替换该文件,并且非管理程序仍将转到虚拟文件夹并使用旧文件。

作为管理员用户,我如何允许其他用户完全控制我在vb6中写入的文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-02 22:09:07

我这样做的方式是让它成为安装者的责任。

使用VSI 1.1为您的应用程序创建安装程序MSI。在CommonAppDataFolder下创建应用程序数据文件夹。

作为构建后步骤,运行脚本以执行以下操作:

  1. 为每台计算机的安装设置MSI数据库:属性表,ALLUSERS设置为1的行。
  2. 在目录表中,找到CommonAppDataFolder的条目并获取其目录索引。使用此索引可在目录表中查询CommonAppDataFolder为父项的条目,并获取其索引(这是文件表中的应用程序数据subfolder).
  3. Look,以获取program.
  4. Create的组件索引数据库中的CreateFolder表(如果不存在)。通过索引向所需应用程序子目录的CreateFolder添加一行,并将其绑定到程序的组件索引。
  5. 如果LockPermissions表不存在,则创建该表。为应用程序数据子目录插入新的LockPermissions行,为每个人提供FILE_ALL_ACCESS

事情就是这样。

您可以这样做,或者使用VSI 1.1,然后使用Orca编辑MSI,或者可能使用第三方MSI创作工具。这些条目可以通过其GUI进行设置,并可以保存在安装程序项目中。我只使用在每次构建VSI 1.1之后运行的一个小WSH脚本。

AFAIK根据Windows应用程序指南,这是完成此类操作的推荐方法。如果您的需求更丰富,您可以使用多个子目录或子目录,其中一些允许完全访问,一些是只读的,等等。

您的程序可以使用Shell自动化对象或通过调用Shell32作为标准动态链接库(使用Declare函数或TLB)来定位文件夹。

票数 2
EN

Stack Overflow用户

发布于 2009-09-02 20:41:11

这不一定是谁写的文件,而是他们把它写到哪里。默认情况下,程序文件文件夹及其子文件夹对所有标准用户都是只读的。请尝试改用All Users Application Data文件夹。

这对VB6来说有点棘手,因为它在设计时根本没有考虑到Vista.一些相关的文件夹被重新命名了,我不知道怎么让vb6给出你想要的文件夹,除非使用一个“声明函数”别名来直接调用windows API。

因此,我所知道的找到合适位置的最简单可靠的方法是使用%ALLUSERSPROFILE%环境变量。在XP上默认返回"C:\Documents and Settings\All Users“,在Vista上默认返回"C:\ProgramData”。从那里你可以找到一个"Application Data“文件夹。它不会存在,你在Vista上也不需要它,但如果它不存在,创建一个也不会有任何伤害。这为你在两个系统上提供了一致的文件夹结构,你可以在其中为你的应用创建子文件夹作为工作空间。

最后要注意的是:这对Vista来说并不是一个新的变化。默认情况下,Program Files文件夹对标准用户始终是只读的。XP的工作方式与此相同。只是有那么多人在XP中以管理员的身份运行,你也许能够逃脱惩罚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1369962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档