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

おそらく、設定ファイルへの正しいパスを提供していません。

アプリケーション構成を管理するには、次の方法があります。

構成ファイルは、プログラム ファイルのアプリケーション ディレクトリにインストールされますが、実行時に構成ファイルに変更が加えられるとすぐに、アプリ データ フォルダーにコピーされます。

必要に応じて、新しくインストールされたアプリケーションを既存の構成からアップグレードすることができます

アプリケーションの新しいバージョンがインストールされるたびに、%AppData\Local\%\ の下に新しいフォルダーが作成され、そこに新しい構成ファイルが配置されます。既存のファイルはいつでもコピーできる古いフォルダーに残りますが、正しいパスを見つけるか、アプリケーション名に基づいて常に名前が付けられる完全なフォルダーをコピーする必要があります。

于 2013-05-24T14:57:14.463 に答える