私の C# アプリケーションには 2 つのバージョンのインストーラーがあります。V1 と V2 と言います。
V1をインストールしました。また、セットアップ プロジェクトのレジストリ設定でInstallDir= [TARGETDIR]
、アプリケーションのインストール フォルダを指定するレジストリ キーを作成しました。したがって、インストール フォルダーを取得する場合は、生成したレジストリ キーを使用してパスを取得できます。
問題は、バージョン 2 V2 のインストール中です。以前のバージョンのインストール フォルダーにある example.txt というファイルをどこかにコピーする必要があります。
次のように、Install 状態のインストーラー クラスにカスタム アクションを作成しました。
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
string path = null;
string registry_key = @"SOFTWARE\";
using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
{
foreach (string subkey_name in key.GetSubKeyNames())
{
if (subkey_name == "default Company Name")
{
using (RegistryKey subkey = key.OpenSubKey(subkey_name))
{
path = (string)subkey.GetValue("InstallDir");
}
}
}
}
string fileName = "example.txt";
string sourcePath = path;
string targetPath = @"C:\Users\UserName\Desktop";
// Use Path class to manipulate file and directory paths.
string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
string destFile = System.IO.Path.Combine(targetPath, fileName);
// To copy a folder's contents to a new location:
// Create a new target folder, if necessary.
if (!System.IO.Directory.Exists(targetPath))
{
System.IO.Directory.CreateDirectory(targetPath);
}
// To copy a file to another location and
// overwrite the destination file if it already exists.
System.IO.File.Copy(sourceFile, destFile, true);
}
私が考えたのは、カスタム アクションの Install メソッドでレジストリからのパスを指定すると、以前のバージョンのパスが取得され、以前のバージョンのインストール パスにファイルがコピーされるということです。
ただし、カスタム アクションの Install メソッドをコピーしても、レジストリは新しいバージョンのパスで更新され、現在の値を取得して新しいバージョンのファイルで更新されます。
しかし、そのインストール フォルダに以前のバージョンのファイルが必要です。
どうすればそれを達成できますか?