这是我的问题,我需要在安装product.msi安装程序时备份文件夹中的现有配置文件。我尝试使用(使用自定义操作)Installer Class
它可以工作但不是正确的方向。
仅在整个安装完成后才进行备份。即,安装后我习惯获得3个配置文件,这3个文件作为文件夹中的备份。
我的安装类:
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
string directory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
String folderPath = directory + "\\Myproduct Before " + version;
string[] newPath = Directory.GetFiles(directory, "*.config");
int newPathCounter = newPath.Count();
if (newPathCounter != 0)
{
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
for (int i = 0; i < newPath.Count(); i++)
{
string source = newPath[i];
string destination = source.Replace(directory, folderPath);
File.Copy(source, destination, true);
}
}
else
{
MessageBox.Show("No files to copy");
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
我也尝试在OnBeforeInstall
中提供此代码,但同样的事情发生了。请就此提出建议。
答案 0 :(得分:1)
也许您没有提供配置文件的正确路径。
以下是管理应用程序配置的可能方法:
配置文件安装在程序文件中的应用程序目录中,但是一旦在运行时对配置文件进行任何更改,它们就会被复制到app data文件夹。
如果需要,您可以从现有配置升级新安装的应用程序 How do you keep user.config settings across different assembly versions in .net?
每次安装新版本的应用程序时,它都会在%AppData \ Local \%\下创建一个新文件夹,并将新配置文件放在那里。现有文件保留在旧文件夹中,可以随时复制,但您需要找到正确的路径,或者只复制始终以应用程序名称命名的完整文件夹。