Uruchamianie Poleceń Wiersza Polecenia
Czy Jest jakiś sposób na uruchamianie poleceń wiersza poleceń z poziomu aplikacji C#? Jeśli tak to jak bym zrobił:
copy /b Image1.jpg + Archive.rar Image2.jpg
To w zasadzie osadza plik RAR w obrazie JPG. Zastanawiałem się tylko, czy nie ma sposobu, aby zrobić to automatycznie w C#.
10 answers
To wszystko co musisz zrobić uruchom polecenia powłoki Z C #
string strCmdText;
strCmdText= "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
System.Diagnostics.Process.Start("CMD.exe",strCmdText);
EDIT:
Ma to na celu ukrycie okna cmd.
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.StartInfo = startInfo;
process.Start();
Edytuj: 2
Ważne jest to, że argument zaczyna się od /C
w przeciwnym razie nie zadziała. Jak Scott Ferguson powiedział: "wykonuje polecenie określone przez ciąg znaków, a następnie kończy."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 13:07:39
Próbowałem @RameshVel solution, ale nie mogłem przekazać argumentów w mojej aplikacji konsolowej. Jeśli ktoś doświadcza tego samego problemu tutaj jest rozwiązanie:
using System.Diagnostics;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-30 17:22:43
var proc1 = new ProcessStartInfo();
string anyCommand;
proc1.UseShellExecute = true;
proc1.WorkingDirectory = @"C:\Windows\System32";
proc1.FileName = @"C:\Windows\System32\cmd.exe";
proc1.Verb = "runas";
proc1.Arguments = "/c "+anyCommand;
proc1.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(proc1);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 19:22:26
Chociaż technicznie nie odpowiada to bezpośrednio na postawione pytanie, odpowiada na pytanie, Jak zrobić to, co chciał zrobić oryginalny plakat: połączyć pliki. Jeśli już, to jest to post, aby pomóc początkującym zrozumieć, o czym Hunter i Konstantin rozmawiają.
Jest to metoda, której używam do łączenia plików (w tym przypadku jpg i zip). Zauważ, że tworzę bufor, który zostanie wypełniony zawartością pliku zip (w małych kawałkach, a nie w jednej dużej operacji odczytu), następnie bufor jest zapisywany z tyłu pliku jpg, aż do osiągnięcia końca pliku zip:
private void CombineFiles(string jpgFileName, string zipFileName)
{
using (Stream original = new FileStream(jpgFileName, FileMode.Append))
{
using (Stream extra = new FileStream(zipFileName, FileMode.Open, FileAccess.Read))
{
var buffer = new byte[32 * 1024];
int blockSize;
while ((blockSize = extra.Read(buffer, 0, buffer.Length)) > 0)
{
original.Write(buffer, 0, blockSize);
}
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 09:37:41
Tak ,jest (patrz link w komentarzu Matta Hamiltona), ale łatwiej i lepiej byłoby używać klas IO. NET. Możesz użyć pliku.ReadAllBytes, aby odczytać pliki, a następnie plik.WriteAllBytes do zapisu wersji "osadzonej".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-24 04:30:48
Żadna z powyższych odpowiedzi nie pomogła z jakiegoś powodu, wygląda na to, że zamiatają błędy pod dywan i utrudniają rozwiązywanie własnych poleceń. No i skończyło się na czymś takim, może to komuś pomoże:
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = @"C:\Program Files\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe",
Arguments = "checkout AndroidManifest.xml",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true,
WorkingDirectory = @"C:\MyAndroidApp\"
}
};
proc.Start();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 04:01:38
Tutaj jest trochę prosta i mniej kodowa wersja. Ukryje też okno konsoli -
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/C copy /b Image1.jpg + Archive.rar Image2.jpg";
process.Start();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-02 06:03:13
Z odniesieniem do Microsoft.VisualBasic
Interaction.Shell("copy /b Image1.jpg + Archive.rar Image2.jpg", AppWinStyle.Hide);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 01:26:32
Możesz to zrobić używając CliWrap w jednej linii:
var stdout = new Cli("cmd")
.Execute("copy /b Image1.jpg + Archive.rar Image2.jpg")
.StandardOutput;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-29 17:33:23
Możesz to osiągnąć za pomocą następującej metody (jak wspomniano w innych odpowiedziach):
strCmdText = "'/C some command";
Process.Start("CMD.exe", strCmdText);
Kiedy wypróbowałem metody wymienione powyżej, stwierdziłem, że moje polecenie niestandardowe nie działa przy użyciu składni niektórych z powyższych odpowiedzi.
Dowiedziałem się, że bardziej złożone polecenia muszą być zawarte w cudzysłowach, aby działały:
string strCmdText;
strCmdText = "'/C cd " + path + " && composer update && composer install -o'";
Process.Start("CMD.exe", strCmdText);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-18 19:59:43