使用 InstallShield 安装我的应用程序后,我的 sqlite .db 文件被保存在 AppData 目录中。这是为什么?
After using InstallShield to install my app my sqlite .db file is being saved in the AppData directory. Why is that?
在使用免费版 InstallShield 并在我的机器上安装我的应用程序后,我注意到我的数据文件(一个 sqlite .db 文件)保存在与我 运行 它在 Visual Studio。基本上不是保存在带有 .exe 文件的目录中,而是保存在此处:
C:\Users\blaaah\AppData\Local\VirtualStore\Program 文件 (x86)\MyAppA\MyAppA
我的 .exe 文件及其 .dll 文件保存在这里:
C:\Program 文件 (x86)\MyAppA\MyAppA
我很好奇为什么会这样?
我也很好奇如何使用代码获取包含我的数据文件的目录。
VirtualStore 文件夹是由 UAC 完成的文件系统重定向引起的。通过这样做,Microsoft 能够在不牺牲太多向后兼容性的情况下锁定 Program Files 目录。任何时候应用程序尝试写入程序文件位置,写入将被重定向到虚拟存储。
可以在 User Account Control For Game Developers 文章中找到 MSDN 上关于此的不错的文章。
引用那篇文章:
Virtualization affects the file system and registry by redirecting system-sensitive writes (and subsequent file or registry operations) to a per-user location within the current user's profile. For example, if an application attempts to write to the following file:
C:\Program Files\Company Name\Title\config.ini
the write is automatically redirected to:
C:\Users\user name\AppData\Local\VirtualStore\Program Files\Company Name\Title\config.ini
Likewise, if an application attempts to write a registry value like the following:
HKEY_LOCAL_MACHINE\Software\Company Name\Title
it will be redirected instead to:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Company Name\Title
在使用免费版 InstallShield 并在我的机器上安装我的应用程序后,我注意到我的数据文件(一个 sqlite .db 文件)保存在与我 运行 它在 Visual Studio。基本上不是保存在带有 .exe 文件的目录中,而是保存在此处: C:\Users\blaaah\AppData\Local\VirtualStore\Program 文件 (x86)\MyAppA\MyAppA
我的 .exe 文件及其 .dll 文件保存在这里: C:\Program 文件 (x86)\MyAppA\MyAppA
我很好奇为什么会这样? 我也很好奇如何使用代码获取包含我的数据文件的目录。
VirtualStore 文件夹是由 UAC 完成的文件系统重定向引起的。通过这样做,Microsoft 能够在不牺牲太多向后兼容性的情况下锁定 Program Files 目录。任何时候应用程序尝试写入程序文件位置,写入将被重定向到虚拟存储。
可以在 User Account Control For Game Developers 文章中找到 MSDN 上关于此的不错的文章。
引用那篇文章:
Virtualization affects the file system and registry by redirecting system-sensitive writes (and subsequent file or registry operations) to a per-user location within the current user's profile. For example, if an application attempts to write to the following file:
C:\Program Files\Company Name\Title\config.ini
the write is automatically redirected to:
C:\Users\user name\AppData\Local\VirtualStore\Program Files\Company Name\Title\config.ini
Likewise, if an application attempts to write a registry value like the following:
HKEY_LOCAL_MACHINE\Software\Company Name\Title
it will be redirected instead to:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Company Name\Title