在c#中查找安装程序路径

在VS2008中,我编写了ac#service,一个安装程序并创建了一个安装包来安装它。 该服务需要加载xml文件才能运行。 将此文件放在VS安装项目提供的各种文件系统文件夹中的最佳位置在哪里,我如何从我的代码中引用这些路径?

谢谢

[我应该指出该服务作为LocalService运行,这意味着即使在安装期间使用“为所有用户安装”,也无法访问VS安装项目中“用户的应用程序数据文件夹”项提供的applicationdata文件夹。 我很容易破解这个,但想了解最佳实践]

我不确定哪个地方更好地存储XML文件。 我认为这不重要。 但是,如果您需要在系统中获取特殊文件夹路径,则可以使用Environment类来执行此操作。 以下代码行获取Program Files的路径:

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 

要读取从安装项目创建的安装程序使用的安装路径:

1)在安装项目中打开“自定义操作”编辑器

2)从安装程序类所在的程序集中添加自定义操作(如果尚未执行此操作)

3)选择此自定义操作并将/myKey="[TARGETDIR]\"到属性网格中的CustomActionData

4)在您的Installer类中,您可以按如下方式访问您的值:您的方法中的Context.Parameters["myKey"]覆盖取决于您在步骤2中的选择

这是一个非常古老的问题,但由于我不同意接受的答案,至少如果程序会更新XML文件,我会发布这个。

在安装服务器式程序(Windows服务或其他非用户特定程序)时,我要做的是在程序文件中安装默认或模板XML设置文件以及程序。 但我从不尝试写入该文件 – 通常不允许这样做。

相反,在程序初始化期间,我测试文件是否先前已复制到我在C:\ ProgramData下创建的子文件夹,即“C:\ ProgramData \ myCompanyName \ myProgramName \ mySettingsFile.xml”。 (使用Environment.SpecialFolder.CommonApplicationData查找C:\ ProgramData – 请参阅此处: http : //msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx )。 如果XML设置文件已经存在,我只需打开它并使用它 – 它是可写的。 如果它不存在,那么我根据需要创建子文件夹并从Program Files复制模板XML设置文件 – 这应该是一次性操作,只有在安装后第一次运行程序时才会执行。

有关详细信息,请参阅此处: 作为开发人员,我应该如何使用Windows Vista(和Windows 7)中的特殊文件夹?

您始终可以使用注册表。