1

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

4

1 に答える 1

1

設定は、インストールのコンテキスト内に保存されます。これを Visual Studio からデバッグするか、別の方法で実行する場合は、既定値が毎回使用され、設定を保存すると、デバッグ セッションの間のみ保持されます。

別の言い方をすれば、app.configファイルのその設定を見てください。値をデバッグして変更します。app.configファイルをもう一度見てください。更新されません。一方、このアプリケーションをデプロイするapp.configと、更新されます (ただし、再デプロイまたは再インストールすると、保存された設定がデフォルトで再び上書きされることに注意してください)。

于 2010-03-08T20:01:22.593 に答える