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 回答