Properties.Settings に保存されているアプリケーション名を使用してアプリケーションを起動しようとすると、奇妙な動作が発生します。使用する前に値を (同じ値に)再設定しないと、起動したアプリケーションはアプリケーション設定の正しい場所を取得できません。おそらく、コードを表示すると、私が言っていることが明確になるでしょう。
新しいプロセスを開始するコードは次のとおりです。かなり簡単なもの。
private void StartNewApplication()
{
Process mainAppProcess = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = Properties.Settings.Default.TheApplicationPath;
startInfo.WindowStyle = ProcessWindowStyle.Normal;
mainAppProcess.StartInfo = startInfo;
mainAppProcess.Start();
mainAppProcess.WaitForExit();
}
標準の OpenFileDialog でファイルを参照して設定を設定するだけの別の関数があります。スニペットを除いて、ここではあえて示しません。
if (fileDialog.ShowDialog().Value == true)
{
Properties.Settings.Default.TheApplicationPath = fileDialog.FileName;
Properties.Settings.Default.Save();
}
失敗していたコード (私には制御できません) は次のようなものです。
private static string GetConfigFolder()
{
string configFolder = ConfigurationManager.AppSettings.Get("ConfigFolder");
configFolder = Path.GetFullPath(configFolder);
return string.IsNullOrEmpty(configFolder) ? Environment.CurrentDirectory : configFolder;
}
AppSettings 値は常に "." を返すため、Path.GetFullPath 呼び出しは現在のディレクトリを返します。Properties.Setting 値を再設定しないと、アプリケーションを起動するプログラムのパスになります。設定を再設定すると、起動されたアプリケーションのパスになります。
何か案は?
ありがとう、WTS