gpt4 book ai didi

c# - Process.Start 和 Process.StartInfo 没有正确传递参数

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:10 25 4
gpt4 key购买 nike

简而言之,我正在为仿真器 MAME 编写一个前端,作为对 WPF 和 C# 的研究。

GUI 已设置,它正在正确读取 cfg,除了实际启动 MAME 之外一切正常。

在命令行 (Windows 7) 中,我可以键入以下内容并让模拟器正常启动。

c:\MAME\Emulator\mame.exe mslug.zip

这将完全按照设计启动模拟器,没有任何问题。但是我已经尝试了以下所有方法。

Process Mame = new Process(emulatorPath);
Mame.StartInfo.Arguments = romSelected;
Mame.Start();

我尝试了上面的变量和 put Mame.StartInfo.Arguments = "mslug.zip"

ProcessStartInfo Mame = new ProcessStartInfo(emulatorPath);
Mame.Arguments = romSelected;
Process.Start(Mame);

我也对变量进行了尝试,并将“mslug.zip”放在它的位置。

最后我尝试了以下方法。

Process.Start(@"c:\Mame\emulator\mame.exe", "mslug.zip");

并且它的行为与之前的尝试相同。

如果我不尝试向它传递参数,程序会正常启动,只是告诉我没有 rom。上述任何传递参数的方法都会导致快速命令提示符显示与 rom 的 zip 文件为空时显示的信息相同的信息。

从我读到的关于 Process.Start 等的内容来看,我在上面输入的内容应该等同于打开命令行并输入我开始这篇文章时使用的命令。但如果是这样的话,那么这应该没有问题。我不确定我是否做错了什么,或者是否有更好的方法来解决这个问题。

注意:我还浏览了 Windows GUI 并创建了 mame.exe 的快捷方式,并编辑了它的属性以将 mslug.zip 作为参数传递,它也能正常工作,因此不需要通过据我所知,命令行。

顺便说一句,我在应用程序的图形用户界面中有调试文本框,这些文本框使用我的代码中使用的变量进行更新,以验证变量是否正确。

更新:
我想补充一点,该程序(对于那些不熟悉的人)依赖于您尝试启动的 rom 的文件名。意味着传递参数 mslug.zip 会导致程序转到它自己的 rom 目录(当前为 C:\mame\emulator\roms)并搜索 mslug.zip。我可以从系统中的任何目录运行该命令并获得相同的结果。我也可以像

这样传递到 rom 的路径
c:\mame\emulator\mame.exe c:\mame\emulator\roms\mslug.zip

无论我在哪里运行它,它都可以正常工作。我已经在我的代码中尝试过,既通过将路径作为变量传递,也通过将它们像

string romSelected = @"c:\mame\emulator\roms\mslug.zip";

两者都以同样的方式失败。

最佳答案

您使用的代码工作正常。它确实向程序发送了正确的参数。毫无疑问。

一些可能出错的事情:

  • 文件不存在
  • 文件在当前工作目录中不存在,也就是mame正在寻找它的地方(您可以尝试使用一个不存在的文件名命令行作为测试。如果错误相同,则可能找不到文件。尝试使用文件的完整路径);
  • 一些权限问题,错误被程序掩盖了。

作为Sinatr建议,您可以使用 Directory.SetCurrentDirectory 设置当前工作目录.请注意,该程序的当前工作目录也会受到影响,因此您可能需要考虑自己在做什么。

你最好设置你启动进程的工作目录,使用Process.WorkingDirectory .

关于c# - Process.Start 和 Process.StartInfo 没有正确传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com