C# - 在程序中运行CMD命令。

时间:2012-05-19 01:55:56

标签: c# process lua cmd

我在此程序中运行CMD命令时遇到问题。我正在使用“lua LuaSrcDiet.lua myscript.lua -o myscriptdone.lua”命令。每当我运行程序时,它告诉我它找不到指定的文件。我猜这是因为命令提示符在运行时没有在正确的目录中。正确的目录是用户文件夹。有什么方法可以让你想到,所以我可以解决这个问题。非常感谢。

try 
{
    File.Copy(filedir1, userPath + "/myscript.lua", true);
}
catch
{
    MessageBox.Show("There has been an problem. It may be because you need to select a Lua file to open.", "Love Compiler", MessageBoxButton.OK, MessageBoxImage.Error);
}

File.Copy("Stuff/LuaDiet/lua.exe", userPath + "/lua.exe", true);
File.Copy("Stuff/LuaDiet/LuaSrcDiet.lua", userPath + "/LuaSrcDiet.lua", true);

Process luarun = new Process();
luarun.StartInfo.WorkingDirectory = @"C:\Users\Leachman";
luarun.StartInfo.FileName = "lua LuaSrcDiet.lua myscript.lua -o myscriptdone.lua";
luarun.StartInfo.UseShellExecute = false;
luarun.StartInfo.Arguments = "/all";
luarun.StartInfo.RedirectStandardOutput = true;
luarun.StartInfo.CreateNoWindow = false;
luarun.Start();

2 个答案:

答案 0 :(得分:1)

看起来你正试图在文件名字段中传递参数。尝试将文件名设置为实际文件名(lua.exe)并将其他项目移动到参数部分。

答案 1 :(得分:1)

只需编辑这些行:

FROM:

luarun.StartInfo.FileName = "lua LuaSrcDiet.lua myscript.lua -o myscriptdone.lua";
luarun.StartInfo.Arguments = "/all";

TO:

luarun.StartInfo.FileName = "lua.exe";
luarun.StartInfo.Arguments = "  LuaSrcDiet.lua myscript.lua -o myscriptdone.lua /all";

我认为这应该有效!

更新

在看到您的评论后,我意识到您应该使用AsynchronousFileCopy

来自Answer of another SO Question的代码:

public class AsyncFileCopier
{
    public delegate void FileCopyDelegate(string sourceFile, string destFile);

    public static void AsynFileCopy(string sourceFile, string destFile)
    {
        FileCopyDelegate del = new FileCopyDelegate(FileCopy);
        IAsyncResult result = del.BeginInvoke(sourceFile, destFile, CallBackAfterFileCopied, null);
    }

    public static void FileCopy(string sourceFile, string destFile)
    { 
        // Code to copy the file
    }

    public static void CallBackAfterFileCopied(IAsyncResult result)
    {
        // Code to be run after file copy is done
    }
}

称之为:

AsyncFileCopier.AsynFileCopy("Stuff/LuaDiet/lua.exe", userPath + "/lua.exe");
相关问题