Czy istnieje sposób uruchamiania poleceń wiersza polecenia z aplikacji C #? Jeśli tak, to jak powinienem wykonać następujące czynności:
copy /b Image1.jpg + Archive.rar Image2.jpg
Zasadniczo osadza plik RAR w obrazie JPG. Zastanawiałem się tylko, czy istnieje sposób, aby to zrobić automatycznie w języku C #.
Odpowiedzi:
to wszystko, co musisz zrobić, aby uruchomić polecenia powłoki z C #
EDYTOWAĆ:
Ma to na celu ukrycie okna cmd.
EDYCJA: 2
Ważne jest to, że argument zaczyna się od, w
/C
przeciwnym razie nie zadziała. Jak powiedział Scott Ferguson : „Wykonuje polecenie określone przez ciąg, a następnie kończy działanie”.źródło
Próbowałem rozwiązania @RameshVel, ale nie mogłem przekazać argumentów w mojej aplikacji konsoli. Jeśli ktoś napotka ten sam problem, oto rozwiązanie:
źródło
cmd.StandardInput.WriteLine(@"cd C:\Test; pwd")
źródło
@
znak w C #?proc1.FileName = "C:\\Windows\\System32\\cmd.exe";
proc1.Verb = "runas";
że ten proces działa z podwyższonymi uprawnieniami ... Nie zawsze jest to zamierzone.Żadna z powyższych odpowiedzi nie pomogła z jakiegoś powodu, wydaje się, że zamiatają błędy pod dywan i utrudniają rozwiązywanie problemów z komendą. Skończyło się na tym, że może coś takiego może pomóc:
źródło
cmd.exe
aplikacji, możesz przekazywać polecenia jako argumenty.echo Hello World!
i wyświetlał dane wyjściowe polecenia w wyskakującym oknie cmd. Tak próbowałem:Filename = @"echo"
,Arguments = "Hello World!"
,UseShellExecute = false
,RedirectStandardOuput = false
,CreateNoWindow = false
. Dzięki temu okno cmd aplikacji nadrzędnej wyświetlało „Hello World!” (co ma sens, ponieważ standardowe wyjście nie zostało przekierowane do procesu potomnego).Choć technicznie nie odpowiada to bezpośrednio na postawione pytanie, odpowiada na pytanie, jak zrobić to, co chciał oryginalny plakat: łączyć pliki. Jeśli już, to jest post, który pomoże początkującym zrozumieć, o czym rozmawiają Instance Hunter i Konstantin.
Jest to metoda, której używam do łączenia plików (w tym przypadku jpg i zip). Zauważ, że tworzę bufor, który jest wypełniany zawartością pliku zip (raczej w małych porcjach niż w jednej dużej operacji odczytu), a następnie bufor jest zapisywany z tyłu pliku jpg, aż do końca pliku zip osiągnął:
źródło
jeśli chcesz zachować otwarte okno cmd lub chcesz użyć go w winform / wpf, użyj go w ten sposób
Utrzyma otwarte okno cmd
źródło
cmd
polecenia i jego parametrów.Tak, istnieje (patrz link w komentarzu Matta Hamiltona), ale łatwiej i lepiej byłoby korzystać z klas IO platformy .NET. Możesz użyć File.ReadAllBytes do odczytania plików, a następnie File.WriteAllBytes do napisania wersji „osadzonej”.
źródło
Możesz to zrobić za pomocą CliWrap w jednym wierszu:
źródło
Unable to find package 'CliWrap' at source
w odniesieniu do
Microsoft.VisualBasic
źródło
Oto trochę prosta i mniejsza wersja kodu. Ukryje także okno konsoli-
źródło
jeśli chcesz uruchomić polecenie w trybie asynchronicznym - i wydrukuj wyniki. możesz zrobić tę klasę:
źródło
Możesz to osiągnąć za pomocą następującej metody (jak wspomniano w innych odpowiedziach):
Kiedy wypróbowałem metody wymienione powyżej, okazało się, że moje niestandardowe polecenie nie działa przy użyciu składni niektórych z powyższych odpowiedzi.
Odkryłem, że bardziej złożone polecenia muszą być zawarte w cudzysłowach, aby działać:
źródło
możesz po prostu napisać kod w
.bat
rozszerzeniu formatu, kod pliku wsadowego:c:/ copy /b Image1.jpg + Archive.rar Image2.jpg
użyj tego kodu c #:
Process.Start("file_name.bat")
źródło
.vbs
rozszerzeniu formatu, kod:CreateObject("Wscript.Shell").Run "filename.bat",0,True