Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从linqpad启动命令行,不需要';我不能从我的可执行文件工作_C#_.net_Command Line_.net 4.5 - Fatal编程技术网

C# 从linqpad启动命令行,不需要';我不能从我的可执行文件工作

C# 从linqpad启动命令行,不需要';我不能从我的可执行文件工作,c#,.net,command-line,.net-4.5,C#,.net,Command Line,.net 4.5,我正面临一个非常奇怪的问题,我正试图用以下代码从程序中启动一个命令,它在linqpad中工作,如果我将完全相同的代码复制粘贴到独立的.exe中,它将不再工作: var cmd = "/K convert \"c:\\TesseractInput\\46a8c74d-ead1-4a6a-987f-a46b146cb58b.png\" \"c:\\TesseractOutput\\46a8c74d-ead1-4a6a-987f-a46b146cb58b.tif\""; var proc = Proc

我正面临一个非常奇怪的问题,我正试图用以下代码从程序中启动一个命令,它在linqpad中工作,如果我将完全相同的代码复制粘贴到独立的.exe中,它将不再工作:

var cmd = "/K convert \"c:\\TesseractInput\\46a8c74d-ead1-4a6a-987f-a46b146cb58b.png\" \"c:\\TesseractOutput\\46a8c74d-ead1-4a6a-987f-a46b146cb58b.tif\"";
var proc = Process.Start("CMD.exe", cmd);
proc.WaitForExit(20000);
在linqpad中,我最终得到一个命令提示符,并且我的命令被正确执行。在我的独立exe中,我最终得到一个命令promt,其中有一个错误声明

Invalid Parameter - "c:\TesseractOutput\46a8c74d-ead1-4a6a-987f-a46b146cb58b.tif"
这不是我正在调用的程序特有的(其他命令行程序也会遇到同样的问题)

如果我用sysinternal的processexplorer检查进程,我会看到cmd.exe是用正确传递的参数启动的,而从我的程序启动的命令会给出路径“error opening process”

linqpad和my exe都以同一用户(我自己、管理员)的身份运行

我对此研究了很长一段时间,没有取得任何进展,任何建议都是最受欢迎的,因为这阻碍了部署(最后一步是将我在linqpad中开发的外部工具合并到我的程序中)

更新:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。作品
有什么线索可能导致这种情况吗?

您正在运行windows convert命令,该命令将FAT卷转换为NTFS。指定convert.exe文件的路径

var cmd=@”/K c:\mypath\convert c:\temp\1.png c:\temp\2.tif”;
var proc=Process.Start(“CMD.exe”,CMD);
WaitForExit程序(20000);

命令提示可以作为不同的用户运行,并且可以使用不同的路径环境变量运行-路径环境变量是windows搜索convert.exe的地方;通常,它先检查当前文件夹,然后检查path语句中的文件夹。我没有你的转换程序,但是当我运行下面的程序时,我得到了相同的错误

C:\Users\user1>convert c:\temp\1.png c:\temp\2.tif
Invalid Parameter - c:\temp\2.tif

C:\Users\user1>convert /?
Converts a FAT volume to NTFS.

CONVERT volume /FS:NTFS [/V] [/CvtArea:filename] [/NoSecurity] [/X]


  volume      Specifies the drive letter (followed by a colon),
              mount point, or volume name.
  /FS:NTFS    Specifies that the volume will be converted to NTFS.
  /V          Specifies that Convert will be run in verbose mode.
  /CvtArea:filename
              Specifies a contiguous file in the root directory
              that will be the place holder for NTFS system files.
  /NoSecurity Specifies that the security settings on the converted
              files and directories allow access by all users.
  /X          Forces the volume to dismount first if necessary.
              All open handles to the volume will not be valid.

C:\Users\user1>

@paqogomez这就是为什么我说它在其中一种情况下有效,而不是在另一种情况下有效,这不太可能是引用问题,因为这两种情况下都是相同的代码(因此在这两种情况下都会出现问题)。@paqogomez还有哪种引用似乎没有很好地逃脱?删除不需要引号的参数周围的引号看起来不错。即,任何没有空格的参数。在Process.StartInfo中,请尝试打开或关闭UseShellExecute属性。@Mikanikal我在这个简单的示例中不需要引号,但我通常需要引号,同样,如果你读到的是同一个样本,有相同的引号,那么这在一种情况下有效,而在另一种情况下无效。为什么这会发生在程序中而不是linqpad中?(如果我打开一个命令提示符并键入correct,我会得到我想要的命令,而不是窗口的convert)是的,当从linqpad打开cmd时,它会打开到>C:\Program Files(x86)\LINQPad4>打开一个应用程序时,通常会打开到>C:\Users\user1>这似乎是个问题,但是我真的很惊讶,因为1)两者都是以同一个用户的身份运行的,2)linqpad和我的应用程序的文件夹中都没有exe(安装程序只是将其添加到路径中)