我有一个VB.net 2015应用程序,我也希望能够作为命令行应用程序运行。
我找到了article如何为visual studio 2010做到这一点,但我不能在2015年那样做。
我认为,我能够读取命令行参数,只是如果现在不知道如何让我的程序决定如果存在命令行参数,它不应该显示主窗体,而只是运行一个专用于处理命令行选项的特定函数。
我认为如果需要做一些事情来拦截一个应用程序启动事件呢?我不知道该怎么做。
*更新我现在正在使用它将在我完成一些代码抛光后发布代码
答案 0 :(得分:0)
该文章有效,并于2015年正常运作。
要手动添加启动事件,请转到MyApplication类,单击左侧组合框,然后选择“(MyApplication Events)”,然后在右侧组合框中选择“启动”,它将为您添加事件,然后只需按照其余部分或文章。或者,只需复制并粘贴他们引用的代码即可。
本文中的主要子类只是一个示例,它可以是您在传递命令行参数时要运行的任何类/子。
答案 1 :(得分:0)
对于我们的批量应用,我们只看一下.exe路径。如果程序是从“批处理程序”文件夹运行,或者具有特定的命名约定,我们只需从Load()
事件调用批处理任务,然后结束程序。如果程序从另一个位置运行,我们将调用GUI。
If Application.ExecutablePath.ToLower.Contains("task.exe") Then
mbBatchTask = True
DoBatch()
Application.DoEvents()
End
Else
' continue loading GUI
End If
答案 2 :(得分:0)
在VS2015中,使用主窗体Load事件 进入物业区并点击雷电图标。 在下面的示例中,我输入了MyLoader
在那里输入您想要用作启动的子程序 并在属性区域将表单的不透明度设置为0%
这样做的效果是应用程序很快就会显示为隐藏状态。 由于表单必须加载否则加载事件也不会触发。
REM inside your program public class
Declare Function AttachConsole Lib "kernel32.dll" (ByVal dwProcessId As Int32) As Boolean
Declare Function AllocConsole Lib "kernel32" () As Int32
Declare Function FreeConsole Lib "kernel32" () As Boolean
Private Sub MyLoader(sender As Object, e As EventArgs) Handles MyBase.Load
Dim args = My.Application.CommandLineArgs
If args.Count > 0 Then
Me.Hide()
Me.Opacity = 0
AttachConsole(-1)
AllocConsole()
Console.WriteLine(vbCrLf + "Here you can output something")
If UCase(args(0)) = "HELP" Then Console.WriteLine("no help")
End If
Console.Write(vbCrlf + System.IO.Directory.GetCurrentDirectory + "\")
FreeConsole()
Application.Exit()
ElseIf args.Count = 0
Me.Opacity = 1.0
REM if no argument is clicked start with a default event / method / or...
Call Button1_Click(Nothing, Nothing)
End If
End Sub