Vista ProgramData文件夹中缺少文件

时间:2008-12-26 11:46:09

标签: vb6 windows-vista vista64 programdata

我有一个遗留的VB6程序,它在公共数据文件夹(CSIDL_COMMON_APPDATA)的子目录中安装Access文件。我现在已经在64位Vista系统上安装了这个程序,程序工作正常并访问C:\ ProgramData \ Wow \ WowCat.mdb中的文件,但是这个文件没有在Windows资源管理器中显示。

我想覆盖这个数据库,使用更新版本的旧版PC,但是使用资源管理器我无法在C:\ ProgramData \ Wow \中看到该文件(我显示所有隐藏文件和系统文件)。如果我继续复制新的WowCat.mdb,该程序仍然适用于旧程序。

在VB中单步执行代码,它肯定会在以下位置打开文件:C:\ ProgramData \ Wow \ WowCat.mdb。搜索C:驱动器只显示新副本,那么程序访问的是哪一个?

2 个答案:

答案 0 :(得分:2)

这是因为Windows Vista中的文件夹重定向。如果您通常无权将某些内容写入C:\ Program Files-文件夹,则Vista将以静默方式将这些写入重定向到用户目录中的“秘密”文件夹。对于创建该文件的用户(以及以该用户身份运行的任何程序),该文件仍然可见,但对于其他任何人都不可见。因此,您的程序可能与Explorer不同,因此Explorer无法看到它。

在Vista 64位计算机上查看dir / aL的以下输出:

C:\ProgramData>dir /aL
 Volume in drive C has no label.
 Volume Serial Number is 74DB-58F8

 Directory of C:\ProgramData

02.11.2006  16:41    <JUNCTION>     Application Data [C:\ProgramData]
02.11.2006  16:41    <JUNCTION>     Desktop [C:\Users\Public\Desktop]
02.11.2006  16:41    <JUNCTION>     Documents [C:\Users\Public\Documents]
02.11.2006  16:41    <JUNCTION>     Favorites [C:\Users\Public\Favorites]
02.11.2006  16:41    <JUNCTION>     Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
02.11.2006  16:41    <JUNCTION>     Templates [C:\ProgramData\Microsoft\Windows\Templates]
               0 File(s)              0 bytes
               6 Dir(s)  62 040 051 712 bytes free

该功能称为重新分析点或结点,具体取决于您阅读它们的位置。它们与Unix中的符号链接非常相​​似。

答案 1 :(得分:0)

正确执行此操作需要Windows Installer MSI或旧版安装程序运行提升,在CommonAppDataFolder下创建一个子文件夹,为每个人(或适当的组)提供对此文件夹的完全控制,最后将MDB放在那里。您还可以创建文件夹,在那里移动MDB文件,并仅对文件设置权限。

EXE本身也可以在首次运行时执行此操作,如果它运行提升或检测到遗漏并产生升级过程来完成工作。标准规定应该通过显示UAC Shield图标的菜单项或按钮启动此操作,而不仅仅是弹出UAC提示。

通过MSI包可以轻松实现。