У меня есть приложение WinForm, которое состоит в преобразовании одного формата флага в другой формат файла.Отправить ExitCode в прикрепленный CMD из WinForm?
Я хотел добавить поддержку CLI, поэтому я работаю с CMD из WindowsForms.
Если приложение вызывается из CMD, тогда CMD подключается к APP, и GUI не отображается.
Мое приложение определяет формат файла, в котором ничего не делается.
Проблема заключается в том, например, если я запускаю эту команду Batch, то файл будет удален, потому что я не послав ERRORCODE:
MyApp.exe "File With Incorrec tFormat" && Del "File With Incorrect Format"
PS: Оператор Batch «& &» используется для проверки если% ERRORLEVEL% от команды before - «0», чтобы продолжить с конкатенацией команд.
Я хочу избежать рисков, связанных с использованием моего приложения.
Тогда как я могу отправить ненулевые коды выхода в прикрепленный CMD, когда приложение обнаруживает неправильный формат файла?
PS: Я не знаю, нужно ли мне отправлять ненужный код выхода или мне нужно сделать что-то другое.
Это прок:
' Parse Arguments
Private Sub Parse_Arguments()
If My.Application.CommandLineArgs.Count <> 0 Then NativeMethods.AttachConsole(-1) Else Exit Sub
Dim File As String = My.Application.CommandLineArgs.Item(0).ToLower
If IO.File.Exists(File) Then
If Not IsRegFile(File) Then
Console.WriteLine("ERROR: " & "" & File & "" & " is not a valid Regedit v5.00 script.")
End
End If
Dim fileinfo As New IO.FileInfo(File)
If My.Application.CommandLineArgs.Count = 1 Then
Try
IO.File.WriteAllText(fileinfo.DirectoryName & ".\" & fileinfo.Name.Substring(0, fileinfo.Name.LastIndexOf(".")) & ".bat", Reg2Bat(File), System.Text.Encoding.Default)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Else
Try
IO.File.WriteAllText(My.Application.CommandLineArgs.Item(1), Reg2Bat(File), System.Text.Encoding.Default)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End If ' My.Application.CommandLineArgs.Count = 1
' Console.WriteLine("Done!")
Else
Console.WriteLine("ERROR: " & "" & File & "" & " don't exists.")
End If ' IO.File.Exists
End
End Sub
UPDATE:
Другой пример более expecific того, что я пытаюсь сделать ...:
Public Class Form1
<System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function AttachConsole(dwProcessId As Int32) As Boolean
End Function
Private Shared Function SendExitCode(ByVal ExitCode As Int32) As Int32
' Here will goes unknown stuff to set the attached console exitcode...
Console.WriteLine(String.Format("Expected ExitCode: {0}", ExitCode))
Return ExitCode
End Function
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
AttachConsole(-1) ' Attaches the console.
SendExitCode(2) ' Send the exitcode (2) to the attached console.
Application.Exit() ' ...And finally close the app.
End Sub
End Class
Как Я могу это сделать?.
Спасибо, но я работаю над VB.NET, я пытался перевести его с помощью онлайн-переводчиков и сам, но на VB не работает, я не знаю, чего мне не хватает из вашего кода, можете ли вы мне помочь перевести его? Я опубликовал свое намерение перевода в своем UPDATE, см. его, пожалуйста. – ElektroStudios
Не удалось опубликовать здесь хорошо отформатированный код, поэтому добавили его к моему ответу. – Noseratio
Наконец, я использовал «Environment.Exit()» (не .exitcode), который не нужно прикреплять к консоли, спасибо за всех ... – ElektroStudios