我知道为什么会发生这种情况,并且我知道我需要修改我的程序以适应 Windows 7/8。
好,那我会尽量不打死马(虽然这是我经常喜欢给一个很好的鞭打,因为很多人误解它)。我只想指出,即使在旧版本的 Windows 上,您的程序也能正常运行,这是一个潜在错误的幸运结果。“Program Files”文件夹从来都不是可写的。您不只是在解决较新版本的 Windows 的一些愚蠢的“问题”。这是从一开始就应该做的事情。
我知道“用户”下的 appdata 文件夹是存储数据库/word 文件/备份的推荐位置。但是,在我隐藏的系统上,我希望用户可以轻松访问它(不隐藏),所以我在想 MyDocuments 文件夹?
我知道这很复杂,所以让我看看是否可以尝试使其尽可能简单……
“应用程序数据”文件夹用于存储供您的应用程序内部使用的数据,而不是供用户直接查看或操作的数据。
“我的文档”文件夹用于存放用户应该能够看到和直接操作的所有内容;换句话说,用户数据而不是应用程序数据。
然后还有这两种文件夹类型的每个用户和全局变体。在“应用程序数据”的情况下,每个用户的变体进一步细分为本地(仅保留在本地计算机上)和漫游(跟随用户帐户到她登录的网络上的任何计算机)。
因此,如果您希望文件“易于用户访问”,那么您绝对应该使用“我的文档”文件夹。这就是它的用途——用户文档。
存在所有这些复杂规则的原因是,微软和 Adobe 等流行供应商的行为不端的应用程序有(有?)倾向于将垃圾转储到用户的“我的文档”文件夹中,用户从未打算与之交互的东西直接地。然后,用户将打开他们的文档文件夹并看到一堆他们从未放在那里的东西。“这些都是什么东西?这些不是我的。我的文件呢?” 上周我更新她的电脑时,我妈妈刚刚问过我这个问题。
目前尚不清楚如何找到 MyDocuments。任何人都可以帮忙吗?
从VB 6?简单的方法是Bob和Mark在您查看的问题中建议的方法。这涉及创建一个 Shell 对象并查询它以获取您感兴趣的文件夹的位置。
缺少的部分是与“我的文档”文件夹对应的常量。您将在此处找到完整的常量列表。您想要的名称ssfPERSONAL
(因为在过去创建此 API 时,Windows 不那么友好,并且尚未发明“我的文档”名称),其值为&H05
. 所以代码看起来像:
Const ssfPERSONAL = &H05
Dim strMyDocsPath As String
strMyDocsPath = CreateObject("Shell.Application").NameSpace(ssfPERSONAL).Self.Path
如果我想使用 MyDocuments\CompanyName 之类的东西,甚至是上面链接中提到的 Appdata 文件夹,我如何告诉包/部署向导将 mdb 文件和上面提到的文件夹安装到这个特定文件夹中?我可以使用 PDW 中的 Appdata 或 MyDocuments 文件夹的宏吗?
Bob 在他的回答中没有涵盖的内容不多,除了建议您在更新此 VB 应用程序时,您还可以考虑放弃过时的 PDW 以支持更好的安装程序。
就个人而言,我是Inno Setup的忠实粉丝,它是一个免费的 Windows 应用程序安装实用程序,它提供的功能比你能动摇的还要多。它适用于 VB 6 应用程序。我自己为此使用了很多次。我认为它相当容易使用,至少对于基础来说是这样。它支持各种高级自定义,如果您没有通过阅读文档来很好地学习,其中一些可能会很棘手,但这一切都非常可行。我什至偶然发现了编写 Delphi 代码来自定义 Inno Setup 项目的方式!
在 Inno Setup 中,您可以使用预定义的常量之一访问系统文件夹的路径。例如,{userdocs}
和{commondocs}
。这些工作很像 PDW 中的宏(如果不完全像,那已经很长时间了)。
当然,这仍然不能解决 Bob 正确指出的问题:用户的“我的文档”文件夹的概念对于安装程序并没有多大意义。当然,您可以访问全局(公共)“我的文档”文件夹,因为它在所有用户之间共享,但这可能不是您想要的。安装程序应该能够由任何具有足够权限的用户运行,实际上这通常是一个管理员帐户,不同于用于运行应用程序的常规用户帐户。您不能在设置期间假设特定的用户帐户,您的设计必须考虑到这一点。
在我看来,“模板”方法对您来说是个好方法。用于设置新用户帐户的完整文件集可以存储在“Program Files”文件夹中。这实际上是一个很好的地方,因为它在那里得到了很好的保护,不会被错误修改,而且你只会阅读从中可以保证您拥有必要的权限。当应用程序在新用户帐户下首次启动时,它可以检测到这一事实并提供设置新用户帐户以与应用程序一起使用。此时,您知道您在正确的用户帐户下运行,因此您可以使用上面的代码查询该用户的“我的文档”文件夹的位置。将所需的文件夹结构全部设置在“程序文件”中应用程序文件夹的子目录中,设置新用户帐户就像复制该文件夹一样简单。如果您需要从用户那里收集信息或提供自定义选项,您可以编写一个小的“首次运行向导”。