C# 系统找不到ProcessStartInfo中指定的路径

C# 系统找不到ProcessStartInfo中指定的路径,c#,windows,batch-file,cmd,process.start,C#,Windows,Batch File,Cmd,Process.start,我整个上午都在做这件事,所以我来这里寻求帮助。读了这么多关于这个的问题,尝试了所有的解决方案,但没有解决我的问题 我刚开始使用Process.Start(batchfile.bat)它在某些计算机上工作,但在其他计算机上不工作。在批处理文件不起作用的计算机上,命令提示符打开并显示 'ogr2ogr.exe' is not recognized as an internal or external command, operable program or batch file. 如果打开命令提示

我整个上午都在做这件事,所以我来这里寻求帮助。读了这么多关于这个的问题,尝试了所有的解决方案,但没有解决我的问题

我刚开始使用
Process.Start(batchfile.bat)它在某些计算机上工作,但在其他计算机上不工作。在批处理文件不起作用的计算机上,命令提示符打开并显示

'ogr2ogr.exe' is not recognized as an internal or external command, operable program or batch file.
如果打开命令提示符并运行它,而不是双击批处理文件,则该命令可以正常工作。所以我开始尝试使用ProcessStartInfo

我正在选择一个文件并读取该文件。我从文件中读取的内容并不重要

strFilePath = Path.GetDirectoryName(openFileDialog1.FileName);
此时,strFilePath是=
O:\\03 Supervisors\\04\u Production\\test
O:是一个映射驱动器

我在那个位置创建了一个批处理文件,并向其中写入了一些命令

File.CreateText(strFilePath + "\\" + "kml2shp.bat").Dispose();
我将要执行的命令写入批处理文件

ogr2ogr.exe -f "ESRI Shapefile" "O:\03 Supervisors\04_Production\test\Final.shp"  "O:\03 Supervisors\04_Production\test\_Map.kml"  
PAUSE
我的启动流程的代码现在是

try
{
    ProcessStartInfo startInfo = new ProcessStartInfo();

    if (File.Exists(strFilePath + "\\kml2shp.bat") == false)
    {
        MessageBox.Show("File is missing");
    }
    startInfo.FileName = strFilePath + "\\kml2shp.bat";
    startInfo.LoadUserProfile = false;
    startInfo.Domain = "mydomain";
    startInfo.UserName = "myusername";
    startInfo.Password = MakeSecureString("mypassword");
    startInfo.UseShellExecute = false;

    Process.Start(startInfo);

}
catch (Win32Exception w32E)
{
    MessageBox.Show(w32E.ToString());
}

private static SecureString MakeSecureString(string text)
{
    SecureString secure = new SecureString();
    foreach (char c in text)
    {
        secure.AppendChar(c);
    }

    return secure;
}
这导致

如果我没有定义域、用户和密码,命令提示符会显示

'ogr2ogr.exe' is not recognized as an internal or external command, operable program or batch file.
当我这样做时,它找不到文件

那么,为什么我的
文件.Exists(strFilePath+“\\kml2shp.bat”)
通过,但进程找不到该文件

我试过了

startInfo.WorkingDirectory = strFilePath + "\\";
startInfo.FileName = "kml2shp.bat";
这导致

似乎不喜欢流程中的路径是
O:\\03 Supervisors\\04\u Production\\test


我假设路径中有空格,但我尝试了20种不同的方法,试图用双引号将其括起来,但没有成功。有什么想法吗?

映射驱动器不是全局的,它们特定于登录会话。通过提供凭据,您要求
Process.Start
在单独的登录会话中运行程序,因此当进程尝试启动时,映射的驱动器不再可用。因此出现“找不到路径”和“目录名无效”错误


听起来您似乎并不需要这些凭据,所以只需去掉它们并修复原始问题:批处理程序找不到
ogr2ogr.exe
。最简单的解决方案可能是将可执行文件的完整路径作为批处理文件的一部分提供。或者,如果批处理文件实际上不是必需的(首先使用批处理文件的原因还不清楚),您可以尝试直接使用
进程运行可执行文件。Start

是一个subst dir,网络位置还是常规驱动器?@OWLO:是一个映射驱动器。
PATH
环境变量中是否有
ogr2ogr.exe
?我最好的猜测是,自从相关目录添加到路径后,您还没有重新启动。在这种情况下,一些进程将看到更改,而另一些则不会,这取决于它们的启动方式。如果可以,使用完整路径仍然是最安全的。这样,即使未设置路径,它也可以工作。(PATH是一种遗留技术,应尽可能避免使用。)