1

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

4

1 回答 1

1

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

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

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

如果需要,您可以从现有配置升级新安装的应用程序 如何在 .net 中跨不同程序集版本保留 user.config 设置?

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

于 2013-05-24T14:57:14.463 回答