需要在程序加载时提示用户选择可执行目录

本文关键字:选择 用户 可执行 提示 程序 加载 | 更新日期: 2023-09-27 18:02:38

这是一个简单的表单,有四个按钮,将启动四个程序。这四个程序是相互关联的,并且位于同一个目录下。

我一直在努力将这个程序从c++移植到c#,其中一个主要问题是让WorkingDirectory正常工作。我终于解决了那个讨厌的问题。然而,我现在需要的是提示用户(在程序加载时)选择我的程序应该查找的前面提到的四个可执行文件的目录。

下面是其中一个按钮的代码(还有另外三个按钮与它完全相同,显然只有细微的变化):

private void button1_Click(object sender, EventArgs e)
    {
        string myDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
        string gameDir = Path.Combine(myDir, "PATH TO BE SPECIFIED BY USER");
        string gameExe = Path.Combine(gameDir, "Proc1.EXE");
        Process proc1 = new Process();
        proc1.StartInfo.FileName = gameExe;
        proc1.StartInfo.WorkingDirectory = gameDir;
        proc1.SynchronizingObject = this;
        proc1.EnableRaisingEvents = true;
        proc1.Start();
    }

第4行"PATH TO BE SPECIFIED BY USER"是用户的目录所在的位置。

现在,如果我要硬编码我机器上的目录,它会完美地工作。当用户将这4个可执行文件安装到与i不同的目录时,就会出现问题。

我担心将要发生的是我的程序需要依赖外部配置文件才能工作。我承认,我对编程非常非常陌生,甚至不知道从哪里开始。

我希望我已经充分解释了我的问题。如果没有,请告诉我。谢谢你的帮助!

需要在程序加载时提示用户选择可执行目录

不要使用Path.Combine,而是要求用户使用FolderBrowserDialog选择文件夹,然后将gameDir路径设置为

FolderBroserDialog fbd = new FolderBrowserDialog();
DialogResult result = fbd.ShowDialog();
if( result != DialogResult.OK )
{
  // exit the program as user has not specified any directory
  return;
}
string gameDir = folderBrowserDialog1.SelectedPath;

您的应用程序是否与它运行的4个程序在同一目录中?如果是的话,可以直接使用

System.Environment.CurrentDirectory

返回当前exe的位置。

我相信你所寻找的可以在这里找到:在Windows窗体应用程序或http://msdn.microsoft.com/en-us/library/a65txexh.aspx中保存应用程序设置的最佳实践

和(文件夹浏览):http://msdn.microsoft.com/en-us/library/aa984305(v=vs.71).aspx