我正在努力解决我在尝试从C#应用程序执行wsf脚本时遇到的这个问题,并希望有人能够解释这个奇怪的错误。
假设我在Windows 2012服务器上。我从命令行运行此命令: C:\ windows \ Syswow64 \ cscript.exe C:\ myscript.wsf // job:Job2
此脚本按预期执行,没有任何问题。因为原因,我必须使用32位的cscript。现在请转到我的C#应用程序,它执行以下操作:
processInfo.FileName = "C:\\windows\\Syswow64\\cscript.exe";
processInfo.Arguments = TaskPath + " " + Parameters;
processInfo.WindowStyle = ProcessWindowStyle.Hidden;
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
...
DateTime startTime = DateTime.Now;
StringBuilder output = new StringBuilder();
StringBuilder error = new StringBuilder();
int errorLevel = 0;
using (Process process = Process.Start(processInfo))
{
using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false))
using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false))
{
process.OutputDataReceived += (sender, e) =>
{
if (e.Data == null)
{
outputWaitHandle.Set();
}
else
{
output.AppendLine(e.Data);
}
};
process.ErrorDataReceived += (sender, e) =>
{
if (e.Data == null)
{
errorWaitHandle.Set();
}
else
{
error.AppendLine(e.Data);
}
};
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
errorWaitHandle.WaitOne();
outputWaitHandle.WaitOne();
errorLevel = process.ExitCode;
}
}
我想在此指出,此代码已与我们尝试过的许多其他脚本一起使用。我试着执行这个脚本。 TaskPath =" C:\ myscript.wsf"和参数=" //工作:Job2"。尝试此操作时,我收到以下错误:
C:\ myscript.wsf(100,50)Microsoft VBScript运行时错误:类型不匹配:' CDate'
通常情况下,我认为这必然意味着脚本出现了问题,但是如上所述,脚本在命令行上运行得很好。有什么不同?是否有可能因为脚本是由C#应用程序执行的,它会进行一些奇怪的默认时间本地化?我不太明白差异可能来自哪里,我希望你们可以帮助我;提前致谢! :)
更新 所以我已经能够确定(我认为)C#应用程序与它无关。 C#应用程序在不同于我从命令行运行它的用户下运行。在脚本中没有运行用户特定代码,所以有人可能知道不同用户可能导致错误的原因吗?