我希望我的程序在用户计算机上搜索名为" xonotic.exe"的文件。并打开它。如果有帮助,Xonotic是一款视频游戏。在它的父文件夹中,它包含.exe在启动时使用的许多其他内容。
// Prepare the process to run
ProcessStartInfo start = new ProcessStartInfo();
// Enter the executable to run, including the complete path
start.FileName = @"C:\Users\Landon\Desktop\Xonotic\xonotic.exe";
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = false;
Process.Start(start);
当我使用此代码在vs中运行我的程序时,它会启动" xonotic.exe"但是(here's what it looks like)。这是在发布时的屏幕打印,如果它看起来像文本从我的屏幕边缘走了,因为它是;你所看到的就是我所看到的。
当我退出vs并且只是打开" xonotic.exe"正如我通常会完美地发布。我的问题是为什么编程方式和手动方式会以两种不同的方式打开相同的.exe?此外,当我离开有缺陷的xonotic并将鼠标悬停在图标上以查看完整视图时,它表示由于缺少或无法定位的内容/数据而已到达此菜单。 (You can see what I'm talking about here)。此外,如果这部分可以很容易地解决,有没有办法搜索.exe而不必知道文件路径?我认为这样的事情会非常容易,我想做的只是启动程序,但它给了我很多的悲伤。
答案 0 :(得分:1)
首先设置WorkingDirectory
属性,如果需要,您也可以尝试设置UseShellExecute
属性:
string pathToExecutable = @"C:\Users\Landon\Desktop\Xonotic\xonotic.exe";
var startInfo = new ProcessStartInfo()
{
FileName = pathToExecutable,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = false,
WorkingDirectory = System.IO.Path.GetDirectoryName(pathToExecutable),
UseShellExecute = true
};
更新:
您可以搜索所有文件夹中的所有驱动器,但这将非常耗时。这是代码:
string[] drives = Directory.GetLogicalDrives();
string pathToExecutable = String.Empty;
foreach (string drive in drives)
{
pathToExecutable =
Directory
.EnumerateFiles(drive, "xonotic.exe", SearchOption.AllDirectories)
.FirstOrDefault();
if (!String.IsNullOrEmpty(pathToExecutable))
{
break;
}
}
if (String.IsNullOrEmpty(pathToExecutable))
{
// We did not find the executable.
}
else
{
// We found the executable. Now we can start it.
}
答案 1 :(得分:0)
你有3个不同的问题,也许给每个问题的数字。 关于你的第三个问题 - 你必须有一个根路径,然后你可以搜索子文件夹中的所有exe文件
string PathOfEXE = @"C:\"; //or d:\ or whatever you want to be the root
List<string> fileEntries = Directory.GetFiles(PathOfEXE , "*.exe",
System.IO.SearchOption.AllDirectories).ToList();
Directory.GetFiles(PathPractice, "*.exe", System.IO.SearchOption.AllDirectories).ToList();
System.IO.SearchOption.AllDirectories).ToList();
foreach (string fullPathfileName in fileEntries)
{
string fileName =System.IO.Path.GetFileName(fullPathfileName )
if (fileName=="xonotic.exe"){ //your code goes here
string pathToExecutable = fullPathfileName ;
}
}