2013-04-10 3 views
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, но то же самое происходит. Проконсультируйтесь с этим.

ответ

1

Возможно, вы не указали правильный путь к файлам конфигурации.

Вот возможные способы управления конфигурациями приложений:

Файлы конфигурации устанавливается в каталог приложений в программных файлах, но они копируются в папку данных приложения, как только какие-либо изменения в конфигурационный файл во время выполнения ,

Вы можете обновить недавно установленное приложение от существующей конфигурации в случае необходимости How do you keep user.config settings across different assembly versions in .net?

Каждый раз, когда установлена ​​новая версия приложения, она создает новую папку% AppData \ Local \% \ и поместить новые файлы конфигурации там. Существующие файлы хранятся в старой папке, которую можно скопировать в любое время, но вам нужно будет найти правильный путь или просто скопировать полную папку, которая всегда будет называться после имени вашего приложения.

Смежные вопросы