这是一个简单的表单,有四个按钮,可以启动四个程序。所有四个程序都相互关联,并且位于同一目录中。
我一直在努力将这个程序从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行和第34行;用户指定的路径"是用户目录所在的位置。
现在,如果我要对我的机器上的目录进行硬编码,那么它可以完美运行。当用户将这4个可执行文件安装到与我不同的目录时,会出现此问题。
我担心会发生的事情是我的程序需要依赖外部配置文件来实现这一点。我承认,我对编程非常非常新,甚至不知道从哪里开始。
我希望我已经足够解释了我的问题。如果没有,请告诉我。谢谢你的帮助!
答案 0 :(得分:1)
请勿使用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;
答案 1 :(得分:0)
您的应用程序是否与其运行的4个程序位于同一目录中?如果是这样,你可以使用
System.Environment.CurrentDirectory
返回当前exe的位置。
答案 2 :(得分:0)