如何备份现有的配置文件?

时间:2013-04-10 06:40:50

标签: .net windows-installer setup-deployment

这是我的问题,我需要在安装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中提供此代码,但同样的事情发生了。请就此提出建议。

1 个答案:

答案 0 :(得分:1)

也许您没有提供配置文件的正确路径。

以下是管理应用程序配置的可能方法:

配置文件安装在程序文件中的应用程序目录中,但是一旦在运行时对配置文件进行任何更改,它们就会被复制到app data文件夹。

如果需要,您可以从现有配置升级新安装的应用程序 How do you keep user.config settings across different assembly versions in .net?

每次安装新版本的应用程序时,它都会在%AppData \ Local \%\下创建一个新文件夹,并将新配置文件放在那里。现有文件保留在旧文件夹中,可以随时复制,但您需要找到正确的路径,或者只复制始终以应用程序名称命名的完整文件夹。