2008-12-26 121 views
2

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

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

在VB中逐步执行代码,它肯定会打开文件:C:\ ProgramData \ Wow \ WowCat.mdb。只搜索C:驱动器会显示新的副本,那么程序访问的地方在哪里?

回答

2

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

看到我的Vista的64位机上从DIR /人以下的输出:

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中的符号链接非常相​​似。

0

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

EXE自身也可以在第一次运行时执行此操作,前提是运行时升级或检测到忽略并生成高级进程来执行此任务。标准规定,此操作应通过菜单项或按钮启动,但显示UAC Shield图标,而不仅仅是弹出UAC提示。

虽然通过MSI包装要容易得多。