Visual studio Can';t在我的MSI中创建正确的文件夹结构

Visual studio Can';t在我的MSI中创建正确的文件夹结构,visual-studio,installation,windows-installer,Visual Studio,Installation,Windows Installer,我的应用程序将数据存储在 C:\Documents and Settings\All Users\Application Data\Company\Product\foo 但是,如果我在代码中使用Application.CommonAppDataPath,它会在路径的末尾追加程序集版本。乙二醇 C:\Documents and Settings\All Users\Application Data\Company\Product\foo\1.0.2.0 这意味着我的应用程序无法找到我期望的数

我的应用程序将数据存储在

C:\Documents and Settings\All Users\Application Data\Company\Product\foo
但是,如果我在代码中使用Application.CommonAppDataPath,它会在路径的末尾追加程序集版本。乙二醇

C:\Documents and Settings\All Users\Application Data\Company\Product\foo\1.0.2.0
这意味着我的应用程序无法找到我期望的数据。我可以操纵代码来剥离最后一个文件夹,但我真正想做的是让我的MSI创建适当的程序集版本化文件夹

我试过了

[CommonAppDataFolder][Manufacturer]\[ProductName]\[Version]\
[CommonAppDataFolder][Manufacturer]\[ProductName]\[ProductVersion]\ 
但两者都没有给出正确的结构。(事实上,一个不创建文件夹,另一个基于MSI版本创建文件夹)


那么,有没有办法通过msi创建适当的文件夹,或者我需要解析AppDataPath,或者让我的应用程序创建版本文件夹及其所需的支持结构?

如果在msi中定义
ProductVersion
属性,那么它就可以工作了。(或者你可以随意称呼它。)

据我所知,Windows Installer中没有包含程序集版本的标准属性。因此,您必须自己创建它


此方法的缺点是,当程序集的版本更改时,您必须在安装项目中手动更新此版本属性。

ProductVersion是一个预定义的安装程序属性,用于存储MSI版本。对于应用程序数据文件夹路径,这是一个比程序集版本可靠得多的版本

大多数安装程序在某个地方(例如注册表)编写此版本,然后安装的应用程序读取并使用它


这样也更有意义。您正在安装产品的版本,而不是文件的版本。如果程序集版本在两个不同的安装程序版本中保持不变,则可能会发生一些冲突。

谢谢。出于兴趣,我如何在MSI中定义其他属性?@Matt我不确定在Visual Studio中如何定义,在WiX中,您只需添加一个新元素。基本上,您可以在MSI的属性表中添加一个新行。谢谢。您所说的对于更复杂的安装是有意义的(我应该遵循最佳实践)。我需要重新考虑几件事,但那永远都是这样!切勿安装用户数据,请通过应用程序创建它。这样,在安装、卸载、修补等过程中,它始终与来自MSI的干扰分离。。。您可以使用MSI文件中的CreateFolder条目创建基本文件夹,但数据本身不应安装-这只会导致问题。创建应用程序数据文件夹的常用方法实际上是从程序文件中的模板复制它,然后按用户启动。这可能导致需要调整设置,您可以通过以下方式实现: