2011-06-20 20 views
1

获取制造商名称在.NET中,创建一个安装项目时,应用程序文件都存储在类似这样的路径:从安装

C:\Program Files\[Manufacturer]\[Product Name]

我生成的通用应用程序数据的一个文件夹里面,以便我可以阅读在Win 7 /写没有管理员权限,所以我也是在这个路径生成一个文件夹:

C:\ProgramData\[Manufacturer]\[Product Name]

什么是得到这个代码路径,以便我可以读/ WR的最佳方式迭到这个文件夹?

我只能把制造商名称放在一个常量字符串中并保持同步。或者我可以将它添加到其中一个项目的程序集清单中。或者我可以尝试在安装过程中将其保存到文件中?

有什么建议吗?

+0

你实际上遇到了什么问题? – Oded

+0

我想避免硬编码应用程序数据的路径。 –

+0

如果我使用Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),我可以获得特定于操作系统的路径到C:\ ProgramData之类,但我宁愿不硬编码制造商名称。 –

回答

1

我不认为我会比创建目录以外的设置做任何事情。让应用程序在运行时管理目录。

我会将您的制造商和产品名称保存在代码中的配置文件或硬编码常量中。你也可以做一些反思来看看它在大会上的情况,但这在我脑海中是过度的。

对于ProgramData目录,使用%ALLUSERSPROFILE%环境变量来获取位置。这样它可以在所有版本的Windows上运行。

然后连接环境变量和制造商/产品名称以构建整个目录。

0

您可能需要查看安装程序实例的Context,以存储路径并稍后在Parameters中找到它。

你将需要的值CustomActionData设置为适当的路径(例如/TargetDir="[TARGETDIR]",或任何其它这样的变量可用和期望的。)

然后,在代码,并根据需要,抓住从路径该Parameters属性的Context的,如上面提到的:

var path Context.Parameters.Item("TargetDir") 
+0

这将在自定义安装程序操作中起作用,但我需要从已安装的应用程序本身获取此数据。 –

+1

@Josh G:那么在这种情况下,要么将它们硬编码到某个地方,要么根据执行程序集的物理位置进行一些字符串操作,以获取所需的数据以及可能需要的其他任何部分,如扩展环境变量。但请更新您的问题,因为现在它意味着您希望在安装时通过安装程序执行此操作。 –