是否可以设置配置文件的值以反映所选的Windows安装程序路径?

时间:2011-11-15 12:32:51

标签: c# configuration installer windows-installer

我有一个程序,我将通过Windows安装程序进行部署。该程序将文件输出到app.config文件中指定的位置。

是否可以将配置文件的值更改为安装期间选择的路径?

所以过程如下。

  1. 用户运行Windows安装程序
  2. 用户选择安装程序的路径
  3. app.config中的输出变量已更改为安装位置
  4. 如果用户希望更改输出路径,则可以编辑配置文件以更改输出变量。
  5. 更新:好的,现在我知道如何根据此链接创建自定义安装过程: Configure App.config Application Settings During MSI Install

    如果您只想使用标准控件集,但我希望文件选择器能够选择输出路径,我该怎么办呢?

    好的,我想出了我需要做的事情......这是答案......

    根据链接中的说明将安装程序类添加到要安装的项目中。

    然后按如下方式覆盖该类中的install方法,以读取该用户输入的路径作为安装目录..

    public override void Install(System.Collections.IDictionary stateSaver)
            {
    
                base.Install(stateSaver);
    
                string targetDirectory = Context.Parameters["targetdir"];
    
                string exePath = string.Format("{0}BarcodeScanner.exe", targetDirectory);
    
                Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);
    
                config.AppSettings.Settings["ILPrintExportPath"].Value = targetDirectory;
    
    
                config.Save();
    
            }
    

    然后按照上面链接的其他阶段:)

    正如乔所说,我必须要么确保用户以管理员身份运行应用程序,要么安装在程序文件目录之外,因此它不是一个完美的解决方案,但它可以满足我的需要。

3 个答案:

答案 0 :(得分:2)

请参阅此文Configure App.config Application Settings During MSI Install,其中介绍了如何使用C#自定义操作执行此操作,该操作使用标准的.Net ConfigurationManager类来打开和更新app.config文件。

答案 1 :(得分:1)

为什么不使用Assembly.Location来获取运行EXE的目录?我认为没有必要添加配置设置 - 在安装应用程序后,您不希望这是用户可配置的。

var exePath = Assembly.GetEntryAssembly().Location;
var exeDirectory = Path.GetDirectoryName(exePath);

答案 2 :(得分:0)

如果您希望该路径默认与安装目录相同,则如果您的配置中没有条目,则可以使用Directory.GetCurrentDirectory()。但是,在安装过程中不可能设置其他路径(不确定是否需要)。