我想通过C#应用程序运行几个命令,如
以前我有一个批处理文件,我使用C#运行它,但现在很少有命令可以接受输入。但是怎么做呢?
我试过
Process cmdprocess = new Process();
ProcessStartInfo startinfo = new ProcessStartInfo();
Environment.SetEnvironmentVariable("filename", FileName);
startinfo.FileName = @"C:\Users\cnandy\Desktop\St\2nd Sep\New_CN\New folder\Encrypt web.config_RSAWebFarm\Decrypt Connection String.bat";
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
startinfo.CreateNoWindow = true;
startinfo.RedirectStandardInput = true;
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
cmdprocess.StartInfo = startinfo;
cmdprocess.Start();
在批处理文件中
cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
aspnet_regiis -pi "CustomKeys2" "C:\Users\cnandy\Desktop\Encryption_keys\CustomEncryptionKeys.xml"
aspnet_regiis -pa "CustomKeys2" "NT AUTHORITY\NETWORK SERVICE"
aspnet_regiis -pdf "connectionStrings" %filename%
但实际上他们根本没有被执行。如何实现相同的最后一个命令,我可以接受输入而不是硬编码
"C:\Users\cnandy\Desktop\Test\Websites\AccountDeduplicationWeb"
答案 0 :(得分:3)
试试这个:
Process p = new Process()
{
StartInfo = new ProcessStartInfo("cmd.exe")
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
p.Start();
using (StreamWriter sw = p.StandardInput)
{
sw.WriteLine("First command here");
sw.WriteLine("Second command here");
}
p.StandardInput.WriteLine("exit");
或者,尝试这种更直接的方式(也实现你要求的最后一件事):
string strEntry = ""; // Let the user assign to this string, for example like "C:\Users\cnandy\Desktop\Test\Websites\AccountDeduplicationWeb"
Process p = new Process()
{
StartInfo = new ProcessStartInfo("cmd.exe")
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
}
};
p.Start();
p.StandardInput.WriteLine("cd C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319");
p.StandardInput.WriteLine("aspnet_regiis -pi \"CustomKeys2\" \"C:\\Users\\cnandy\\Desktop\\Encryption_keys\\CustomEncryptionKeys.xml\"");
p.StandardInput.WriteLine("aspnet_regiis -pa \"CustomKeys2\" \"NT AUTHORITY\\NETWORK SERVICE\"");
p.StandardInput.WriteLine("aspnet_regiis -pdf \"connectionStrings\" " + strEntry);
p.StandardInput.WriteLine("exit"); //or even p.Close();
如果使用第二种方式,建议让用户在文本框中输入路径,然后从文本框的Text属性中获取字符串,其中将自动附加所有必要的额外反斜杠。
应该提到的是,没有cmd会显示运行批处理文件或命令。
答案 1 :(得分:1)
使用Process对象启动批处理文件。您可以使用环境变量在进程之间传递值。在这种情况下,从C#到bat文件,您可以使用环境变量传递值。
C#
Environment.SetEnvironmentVariable("searchString","*.txt")
在bat文件中,您可以访问该值,如下所示
dir %searchString%
从c#
启动bat文件System.Diagnostics.Process.Start("path\commands.bat");
使用批处理文件和变量
从C#启动记事本的示例代码System.Environment.SetEnvironmentVariable("fileName", "test.txt");
System.Diagnostics.Process.Start(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + "/commands.bat");
Console.ReadLine();
Bat文件
@echo "staring note pad"
notepad %fileName%
答案 2 :(得分:1)
您仍然可以像以前一样制作批处理文件。只需要改变它就是接受变量。
像
这样的东西 CallYourBatch.bat "MyFileName"
然后在批处理文件中,您可以接受参数
SET fileName=%~1
aspnet_regiis -pdf "connectionStrings" %fileName%
类似地,在形成命令文本时可以使用相同的功能,如果您必须将其作为C#代码的一部分来使用。
我也可以建议使用CALL命令来调用批处理文件吗?有关相同内容的更多信息,请访问http://ss64.com/nt/call.html