2011-09-09 31 views
3

我的应用程序将数据存储在无法在我的MSI中创建正确的文件夹结构

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,或让我的应用程序创建版本文件夹及其所需的支持结构?

+0

不要安装用户数据,通过应用程序创建它。这样,它总是与MSI在安装,卸载,修补等方面的干扰分离开来的。您可以使用MSI文件中的CreateFolder条目创建基础文件夹,但数据本身不应该被安装 - 它只会导致麻烦。 –

+0

创建应用程序数据文件夹的常用方法实际上是将其从程序文件中的模板复制并按用户启动。这可能会导致需要调整设置,并且可以按照以下这些方式实现:http://forum.installsite.net/index.php?showtopic=21552 –

回答

0

如果您在MSI中定义了ProductVersion属性,那么它将起作用。 (或者你可以称它为任何你喜欢的。)

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

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

+0

谢谢。出于兴趣,我如何在MSI中定义其他属性? – Matt

+0

@Matt我不知道它是如何在Visual Studio中完成的,在WiX中,您只需添加一个新的[''](http://wix.sourceforge.net/manual-wix3/wix_xsd_property.htm)元素。基本上你添加一个新的行到MSI的属性表。 –

0

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

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

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

+0

谢谢。你说的话对于更复杂的安装是有意义的(我应该遵循最佳实践)。我需要重新考虑一些事情,但那样总是这样! – Matt

相关问题