xamarin 在Visual Studio中通过C#向Mac上的终端传递参数

5gfr0r5j  于 2022-12-07  发布在  C#
关注(0)|答案(1)|浏览(224)

我在C#中通过Visual Studio向终端传递参数时遇到了一些问题。
我可以成功地打开终端,但是我传递的参数似乎被忽略了。
一般信息:

  • Visual Studio for Mac版本8.9内部版本号1651
  • 解决方案=可可应用
  • 使用Xamarin/Xcode
  • 当我打开终端并自己键入时,终端命令工作正常

下面是我的代码:

var encode = new System.Diagnostics.Process();
encode.StartInfo.FileName = ("/System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal");
encode.StartInfo.Arguments = ("ffmpeg -i " + filepath + " -acodec copy file_fixed.mp3");
encode.StartInfo.RedirectStandardInput = false;
encode.StartInfo.RedirectStandardOutput = false;

encode.Start();

如上所述,终端可以正常打开,但不处理我发送给它的参数。
我尝试过的事情:

  • 设置RedirectsStandardInput = true,然后手动发送命令,但它从不响应。
  • 在我的论证中加入/c、-c和它们的每一个排列。
lnlaulya

lnlaulya1#

这是我找到的解决方案。它可能不是最好的,但它的工作。
1.创建一个bash脚本,其中包含您希望终端执行的代码,并让它接受您指定的参数。https://unix.stackexchange.com/questions/31414/how-can-i-pass-a-command-line-argument-into-a-shell-script
(You可以在MacOS上创建一个文件,方法是创建一个文本文件并另存为yourfile.exe,然后从终端运行chmod +x yourfile.exe来启用它。)
1.将文件放在解决方案的resources文件夹中。(在解决方案资源管理器中右键单击resources-〉add -〉existing files。
1.使用以下代码引用此文件:

string bashpath = System.IO.Directory.GetCurrentDirectory() + "/yourfile.exe";
string args = "your args here";

System.Diagnostics.Process proc = new System.Diagnostics.Process();

proc.StartInfo.FileName = bashpath;
proc.StartInfo.Arguments = args;
proc.Start();

要记住的事项:

  • 您的资源文件夹将位于内部您的.app文件。右键单击-〉显示包内容。
  • Exit 0添加到脚本的末尾,这样就可以调用proc.WaitForExit();

相关问题