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

C# 需要在程序加载时提示用户选择可执行目录,c#,C#,这是一个带有四个按钮的简单表单,将启动四个程序。所有四个程序都相互关联并驻留在同一目录中 我一直在努力把这个程序从C++移植到C,其中一个主要问题是让工作目录运行。我终于解决了那个讨厌的问题。然而,我现在需要的是在程序加载时提示用户选择我的程序应该查找的上述四个可执行文件的目录 下面是其中一个按钮的一些代码。还有三个按钮与之完全相同,只是有一些细微的变化: private void button1_Click(object sender, EventArgs e) { s

这是一个带有四个按钮的简单表单,将启动四个程序。所有四个程序都相互关联并驻留在同一目录中

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

下面是其中一个按钮的一些代码。还有三个按钮与之完全相同,只是有一些细微的变化:

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行用户指定的路径是用户目录所在的位置

现在,如果我对我机器上的目录进行硬编码,它会完美地工作。当用户将这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的位置。

我相信您要查找的内容可以在此处找到:或

和文件夹浏览:


这对我很有帮助。

您正在寻找文件夹浏览对话框吗?我假设这就是我所需要的,因为当程序第一次加载时,只会提示用户选择包含程序应该查找的可执行文件的目录一次。我从未想过这一点。我的意思是,我可以通知用户我的程序必须放在这些可执行文件的目录中。我正试图把它放到不需要的地方,这样用户就可以把我的程序放在他们喜欢的任何地方。然后,如果我的程序确实需要放在那个目录中,他们总是可以为它创建一个快捷方式。也许以后我会让它成为一个没有麻烦的过程。我不完全理解代码应该去哪里,我应该删除什么。我对编码非常陌生,很抱歉不理解。请替换行字符串gameDir=Path.CombinemyDir,路径由用户指定;我还建议您,为了改善游戏玩家的体验,您应该将gameDir和其他设置保存在配置文件或注册表等的某个位置,并为用户提供更新/更改此设置的选项。也许你已经在做了,但我只是觉得最好建议:P:嗨,曼尼什。我真的很感谢你的帮助。昨晚我在网上看了一些指南之后,我想让你们检查一下,看看我到目前为止得到了什么。我添加了一个按钮,允许用户选择他们的目录。但是,我不知道如何保存他们的选择并让其他四个启动按钮读取他们选择的目录。注意顶部的新按钮。当他们选择自己的目录时,其他四个按钮应该能够找到可执行文件。@Steve:在form类中,创建一个字符串变量,将游戏目录存储在类内部,但不在事件处理程序外部。当用户单击“选择CM安装目录”时,使用FolderBrowser对话框让用户选择fbd.SelectedPath,并将其存储在上面创建的变量中。使用该字符串在单击其他按钮时读取游戏目录