我遇到过这样的情况:同一个批处理文件的工作方式与命令行不同,并且是从 IIS 上托管的 WCF 服务触发的。
区别在于 XCOPY 命令。
当我正常运行批处理文件时,XCOPY 会移动我需要的所有数据
XCOPY "C:\from" "C:\to" /K /R /E /I /S /C /H /G /X /Y
但是当它从 WCF 服务运行时,不会复制任何内容。
为了从我的服务运行批处理,我使用以下代码在 C# 中执行批处理文件 https://stackoverflow.com/questions/5519328/executing-batch-file-in-c-sharp有一些小的修改。
我的应用程序拉取在本地系统帐户下运行。我还尝试使用自己的帐户进行应用程序投票 - 不起作用。
怎么了?
简短更新:我最近了解到,我的 WCF 服务正在应用程序池用户下运行,但进程却不是。为了进行实验,我对流程启动代码进行了更新
var pwdArray = "mypassword".ToArray();
var pwd = new System.Security.SecureString();
Array.ForEach(pwdArray, pwd.AppendChar);
processInfo.UserName = "myuser";
processInfo.Password = pwd;
processInfo.Domain = "LocalMachine";
但这没有帮助。在所描述的条件下运行 XCOPY 似乎有一个神秘之处。
还有一则更新:在常规 Windows 服务下启动的进程中也发现了与 XCopy 相同的问题。
感谢这篇文章,成功解决了我的问题(http://social.msdn.microsoft.com/Forums/vstudio/fr-FR/ab3c0cc7-83c2-4a86-9188-40588b7d1a52/processstart-of-xcopy-only-works-under-the-debugger?forum=netfxbcl http://social.msdn.microsoft.com/Forums/vstudio/fr-FR/ab3c0cc7-83c2-4a86-9188-40588b7d1a52/processstart-of-xcopy-only-works-under-the-debugger?forum=netfxbcl)
所以实际上答案是:
这是 xcopy.exe 的一个怪癖。如果重定向输出,则必须
也重定向输入。
var command = "XCOPY ...."
processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = true;
// *** Redirect the output ***
// unfortunately you cannot do it for X Copy
//processInfo.RedirectStandardError = true;
//processInfo.RedirectStandardOutput = true;
process = Process.Start(processInfo);
process.WaitForExit();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)