代码是正常的,但在Start时候回报错。
string pythonDir = @"C:\Python27\ArcGIS10.2\python.exe";
start.Arguments =@"E:\GDSTDDCGHY2\04数据处理服务\DataProcessService\build\Scripts\GPShell.py Copy_management D:\DataProcess\jobs\job_12262aa0-fde5-4e5d-a6c1-7bfb9db74418\XZDC_2016.sde\G2016XZDCCP2KQC2IPY#G2016XZDCCP2KQC2IPY D:\DataProcess\jobs\job_12262aa0-fde5-4e5d-a6c1-7bfb9db74418\result.sde";
start.UseShellExecute = false;
start.CreateNoWindow = true;
start.RedirectStandardOutput = true;
Process process = Process.Start(start);
//这一句会报错
报错信息 :系统找不到指定的文件。
在 System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
在 System.Diagnostics.Process.Start()
在 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
在 SouthGIS.DataProcess.Worker.Runners.JobRunner.ExecuteInPython(String toolName, String paras, String toolBox, String year, String xzqdm, String toolAlias) 位置 E:\GDSTDDCGHY2\04数据处理服务\DataProcessService\SouthGIS.DataProcess.Worker\Runners\JobRunner.cs:行号 1184
在 SouthGIS.DataProcess.Worker.Runners.JobRunner.copyFc(String sdeName, String fcName, String dataType, String xzqdm, String year, Boolean skipLog) 位置 E:\GDSTDDCGHY2\04数据处理服务\DataProcessService\SouthGIS.DataProcess.Worker\Runners\JobRunner.cs:行号 917
然后简单测试了Process.Start(),代码如下:
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"按下任意键以开始...\r\n");
Console.ReadLine();
try
{
string pythonDir = @"C:\Users\think\Desktop\Shadowsocks.exe";
Process.Start(pythonDir);
}
catch (Exception e)
{
Console.WriteLine(e+"\r\n");
}
Console.ReadKey();
}
}
}
如此简单的一个启动,却是报错了;
System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。
在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
在 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
在 ConsoleApp2.Program.Main(String[] args) 位置 c:\users\think\source\repos\ConsoleApp2\ConsoleApp2\Program.cs:行号 28
尝试用File.Exist检测文件是否存在:
这个文件是存在的,返回的居然是false;
百思不得其解。
最后将C盘对应的路径拷贝到D盘下,确实可以访问,证实了是访问权限的问题。
string pythonDir = @"C:\Python27\ArcGIS10.2\python.exe";//@"C:\Python27\ArcGIS10.1\python.exe";
var d = @"D:\Python27\ArcGIS10.2\python.exe";
var b = File.Exists(d);
//此处返回true
原来是因为Win10对C盘的读写限制级别很高,在相同的代码windowsServer和win7上可以跑,但是在win10里面需要对应的设置一下访问权限,或者使用Administrator登录Win10即可