2013-03-14 35 views
1

我有执行Before="InstallFinalize"自定义动作和替换配置文件(config.asp里的)文本:更改文件的文本,而不会破坏卸载过程

String configFilePath = session.CustomActionData["configFile"]; 
var configFile = System.IO.File.ReadAllText(configFilePath);    
session.Log("replace config file"); 
configFile.Replace("test2", "test"); 
session.Log("write config file"); 
System.IO.File.WriteAllText(configFilePath, configFile); 

当我尝试卸载应用程序,我得到错误:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Program Files (x86)\myProject\config.asp'. 

但是文件存在。我想这是问题,因为我改变了原来的那个? 我应该如何更改我的代码,更改文件不会损坏卸载过程? 更改文件时应该更改执行顺序吗?

回答

1

对此的简单解决方法是将config.asp文件安装为config.asp.template,并将其复制到config.asp作为更改所需位的自定义操作的一部分。

这样,原始文件永远不会被触及,并将正确卸载。

+0

这确实很容易解决。收获文件夹后,我将不得不更改已创建文件中的文件名(使用批处理脚本)。 我很好奇如何做到这一点只有一个文件,但不过,这种解决方案将满足我的需求。谢谢。 – Simon 2013-03-14 14:45:22

+0

不要收获它,只需将它静态包含在Wix项目中。我通常只会手动收集文件,然后在我的项目中包含该输出。从那时起,在这里添加/删除奇数文件并没有问题。 – 2013-03-14 15:45:26