卸载后,Access数据仍在数据库中

时间:2015-02-22 09:33:21

标签: vb.net ms-access inno-setup

我有一个使用Vb.Net 2010设计的应用程序,它使用Ms Access 2007作为其数据库。

程序执行正常,但是当我卸载程序并重新安装它时发现了一些有趣的东西,即使重新安装操作将新数据库复制到该位置,我在卸载之前输入的数据仍然在新数据库中。我检查了卸载操作是否在卸载时删除了数据库,我发现它删除了包括所有文件夹在内的所有内容。我不知道它是否以某种方式缓存某个地方或某事。

我正在使用Inno Setup Compiler作为我的安装脚本,并且没有指示将数据库复制到默认位置以外的任何其他位置。

应用中的connectionString指向数据库所在的App Folder

我在网上查了一下,得到了无关的结果(也许我不知道要搜索的正确关键字)。

请有人帮助解释发生了什么和可能的解决方案吗?

我需要帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

您似乎被User Account Control (UAC) virtualization愚弄了。您显然已将数据库文件存储在%ProgramFiles%下,并且用户没有对这些文件夹的读/写访问权限,因此Windows会在

的子文件夹中复制该文件。

%USERPROFILE%\ AppData \ Local \ VirtualStore \ Program Files

并将读/写操作重定向到该副本。

卸载应用程序时,安装程​​序可能在提升的权限下运行(通过UAC提示符)并删除数据库文件的原始副本(在%ProgramFiles%中),但虚拟化副本仍然存在。然后,当您重新安装(再次使用提升的权限)时,原始文件将被复制回%ProgramFiles%,但(已修改的)虚拟化副本已经就位,因此您可以看到之前的旧数据。

道德:如果您的应用程序需要对数据库文件进行修改,请不要将其与应用程序文件一起存储。让安装程序将其置于用户通常具有读/写访问权限的位置,例如,对于单个用户,在%USERPROFILE%下,或在同一台计算机上为多个用户使用%PUBLIC%。