从安装和部署项目中写入到AppData

5

我正在更新一个已安装的应用程序,该程序通过安装和部署项目进行安装。

旧的应用程序在安装过程中将配置文件和数据库文件复制到程序文件夹中的Program Files。这在Win 2000和Win Xp(在本地管理员帐户下)上运行良好。然而,在Windows 7中,不仅这是不被赞同的,而且由于UAC的存在它基本上无法工作。

因此,我想更新应用程序以将其配置/数据写入CommonApplicationData。在现有的安装和部署项目中,您可以轻松选择一些位置作为文件复制的目标。即应用程序文件夹、用户桌面和用户程序文件夹。

我没有看到类似的方法来告诉安装程序将文件复制到AppData/CommonApplicationData文件夹。这种方法是否存在?如果不存在,是否有任何简单的解决方案?

谢谢!

1个回答

5

右键单击|添加特殊文件夹|自定义文件夹并将其命名为任何您想要的名称(常见应用程序数据文件夹很好)。

在文件夹属性网格中,将DefaultLocation属性更改为[CommonAppDataFolder]。

向文件夹中添加一个文件,构建和安装。您应该在Windows 7的C:\ ProgramData中找到您的文件。

请注意,我强烈推荐使用InstallShield和WiX等其他工具来代替Visual Studio部署项目。该工具在其功能上非常有限,您最终会遇到瓶颈。


1
这在大部分情况下都很好用,但我添加了一些文件到一个目录中,其中包括一个数据库文件。我可以很好地写入文件夹中的新文件,并覆盖现有文件,但是数据库说它是只读的。有什么想法吗? - turtle
MS-DOS风格的只读(attrib +R)还是NTFS ACL只读?(用户没有权限)(顺便说一句,这确实是一个新问题) - Christopher Painter
1
对不起。我有点同意,但我认为它与强相关。使用以上方法,我可以创建文件和文件夹,但似乎文件夹被创建为标准用户只读,这似乎违背了使用应用程序数据文件夹的目的。是否有一种方法可以编辑上述方法,以使安装和部署项目将文件夹创建为标准用户可写? - turtle
你问如何将文件部署到CommonApplicationData文件夹,而没有询问该文件夹是否对标准用户具有默认写入权限。就我所知,Windows没有这样一个众所周知的文件夹,我一直觉得这很奇怪。Windows Installer可以通过LockPermissions表更改文件夹权限,但是Visual Studio Deployment Projects不会公开它。记住我的警告,要避免撞墙。对于简单的解决方案,请将这些文件移动到WiX v3合并模块中,并使用WiX的Permission元素。然后在VDRPOJ安装中使用此合并模块。 - Christopher Painter
这就像将一个EXE重构为EXE和DLL,从而在长期运行中带来更好的代码可维护性,合并模块现在代表了单一职责,MSI不过分关注(上帝类)。 - Christopher Painter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接