我有一个程序,我将通过Windows安装程序进行部署。该程序将文件输出到app.config文件中指定的位置。
是否可以将配置文件的值更改为安装期间选择的路径?
所以过程如下。
更新:好的,现在我知道如何根据此链接创建自定义安装过程: 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();
}
然后按照上面链接的其他阶段:)
正如乔所说,我必须要么确保用户以管理员身份运行应用程序,要么安装在程序文件目录之外,因此它不是一个完美的解决方案,但它可以满足我的需要。
答案 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()
。但是,在安装过程中不可能设置其他路径(不确定是否需要)。