c#System.Diagnostics.Process不做任何事情或引发错误

时间:2016-05-13 11:19:06

标签: c# asp.net-mvc-4 process

我想知道是否有人可以帮助我理解为什么Process无效,也不会产生错误。

下面的代码应循环遍历目录,查找扩展名为sqb的所有文件,并为每个文件运行Process作为在服务器上具有提升权限的用户帐户。

该进程应该从文件所在的同一文件夹中运行可执行文件sqb2mtf.exe,例如sqb2mtf.exe file.sqb file.bak这样的参数。

如果我使用Visual Studio 2013并逐步执行代码,我可以看到每个文件都已循环通过,Process似乎触发,但没有文件被转换,也没有任何错误呈现给变量{{1} }。

readToEndError

我不在乎,任何解决这个问题的建议都会非常感激: - )

更新

var directory = new DirectoryInfo(@"D:\inetpub\Import\");

foreach (var file in directory .EnumerateFiles("*.sqb"))
{
    var convert = Path.GetFileNameWithoutExtension(file.ToString());

    var process = new Process
    {
        StartInfo =
        {
            CreateNoWindow = true,
            UseShellExecute = false,
            RedirectStandardOutput = true,
            RedirectStandardInput = true,
            RedirectStandardError = true,
            FileName = @"D:\inetpub\Import\sqb2mtf.exe",
            UserName = "myUserName",
            Domain = "myDomain",
            Password = GetSecureString("myPassword"),
            Arguments = @"D:\inetpub\Import\" + file + " " + @"D:\inetpub\Import\" + convert + ".bak"
        }
    };
    process.Start();

    string readToEndOutput = process.StandardOutput.ReadToEnd();
    string readToEndError = process.StandardError.ReadToEnd();

    process.WaitForExit();

}

var directoryInfo = new DirectoryInfo(BackupDirectory); foreach (var file in directoryInfo.EnumerateFiles("*.sqb")) { var convert = Path.GetFileNameWithoutExtension(file.ToString()); var fileName = BackupDirectory + "sqb2mtf.exe"; var arguments = "\"" + BackupDirectory + file + "\" \"" + BackupDirectory + convert + ".bak\""; var process = new Process { StartInfo = { CreateNoWindow = true, UseShellExecute = true, RedirectStandardOutput = false, RedirectStandardInput = false, RedirectStandardError = false, FileName = fileName, Arguments = arguments } }; process.Start(); process.WaitForExit(); file.Delete(); } 的评论中得出的一点是需要引号,在这种情况下需要引用两个单独的文件。

我可以确认此代码在IISExpress上运行,冒充不同的用户,遗憾的是只是IIS 7.5。

workround是将此代码移动到控制台应用程序中并安装在相关服务器上,然后使用Windows计划任务作为特定帐户运行。

1 个答案:

答案 0 :(得分:1)

对于一些遗留应用程序,我发现我需要将参数作为引用文本传递,否则它们根本不起作用。

不确定这是否是问题,但值得尝试:

Arguments = "\"D:\\inetpub\\Import\\" + file + " D:\\inetpub\\Import\\" + convert + ".bak\"";

这个过程只会默默地死去,这似乎很奇怪。我会仔细检查DomainUserNamePassword