C# 使用命令行参数从批处理文件运行Windows窗体应用程序(C.NET 4.0)

C# 使用命令行参数从批处理文件运行Windows窗体应用程序(C.NET 4.0),c#,winforms,deployment,C#,Winforms,Deployment,我是一名Silverlight/ASP.NET开发人员,试图编写我的第一个Windows窗体应用程序,在服务器上后台运行,填充我们的数据库。最终,我们希望这是一个Windows服务,但最初并不需要它 我需要创建一个批处理文件来执行这个应用程序的5个实例,将URL传递给5个RESTful端点。所以我发布了我的应用程序,它创建了一个setup.exe。安装后,我有一个指向 C:\Users\mi2dev\AppData\Roaming\Microsoft\Windows\Start Menu\Pro

我是一名Silverlight/ASP.NET开发人员,试图编写我的第一个Windows窗体应用程序,在服务器上后台运行,填充我们的数据库。最终,我们希望这是一个Windows服务,但最初并不需要它

我需要创建一个批处理文件来执行这个应用程序的5个实例,将URL传递给5个RESTful端点。所以我发布了我的应用程序,它创建了一个setup.exe。安装后,我有一个指向

C:\Users\mi2dev\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Microsoft\,带有.appref ms文件

我现在不知道该怎么办。运行:

C:\Users\mi2dev\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Microsoft\StreamingApp.appref-ms-http://www.myURL.com 短暂抛出命令窗口,但应用程序未运行,数据未填充到DB中


我在这里遗漏了什么?

因为您的应用程序是.exe格式的。并使winform接受命令行参数检查main方法,还使Form ctor接受参数。然后,只需像使用其他命令一样通过cmd行启动它,但在这里只需导航到文件所在的目录


在批处理的情况下,使用start命令,后跟程序名,然后使用参数。很难理解应用程序内部发生了什么。您需要进行调试,以了解当它接收到给定参数时发生了什么。 所以我建议调试一个EXE。为此,转到EXE项目属性,选择CommandLineArguments中的DEBUG选项卡插入参数字符串。 在DEBUG中运行它,希望您能找出一个问题


如果调试后仍不清楚其为何会出现这种情况,请返回原处:

Silvi如果您计划从批处理文件中使用windows窗体应用程序,并且您认为应用程序在这种模式下的行为将与双击打开时不同,通常的方法是解析命令行参数,也可以在main方法中作为参数使用,以避免加载UI

事实上,如果您已经正确编写了应用程序,那么UI只管理UI,而不包含数据库操作和数据转换的全部逻辑

您可以做的是检查Main方法内部是否有命令行参数,以及是否检测到您定义的任何特殊参数,您甚至避免调用应用程序。。。;并在无用户界面的批处理模式下开始工作


您希望在批处理模式或UI模式中使用的相同逻辑可以包装在助手类中,通常也称为业务管理器或业务逻辑。。。这要看情况而定,这样您就不会有代码重复,只需UI或batch即可很好地调用这些类。

不,他不需要添加参数化构造函数。所有.NET控制台和windows窗体应用程序都从静态main方法启动,当然不能直接从批处理文件调用窗体构造函数。My Program.cs的构造函数中有字符串[]args。然后将该参数传递到Form.cs构造函数中。Program.cs从命令行接受参数。在Main方法中,它创建了我的Form1的一个实例,并传入参数。我在我的程序中抛出了一个messagebox.show.cs,它运行得很好。@Davide Piras先生,你把我搞错了。我的意思是,将参数传递给main,然后通过应用程序从main传递给Forms-ctor。Runnew-Form..:@Scott Silvi如果你可以通过命令行cmd.exe启动你的应用程序,比如$myapplication.exe this is参数,并且你的应用程序启动时会按照你的messagebox显示Arument,那么使用start命令将其放入批处理文件中也会起到同样的作用。不过,我不知道exe在哪里。我试图从我的bin\debug文件夹运行exe,但应用程序在尝试连接到我的数据库时出错。我的连接字符串代码在ConfigurationManager上引发空异常。ConnectionString[myConnString]。ConnectionStringI必须禁用Enable ClickOnce安全设置才能运行命令行参数,但一旦我这样做,应用程序运行良好。正如我所说,应用程序本身设置得很好,可以运行,我只是不知道如何从批处理中执行它file@Scott,那么你是说如果你在这个框中放入一个命令行参数并运行应用程序,它会工作吗?是的,我只是不知道如何或在哪里运行应用程序,例如C:\ProgramFiles\MyApp\MyApp.exe myURL。我对ClickOnce不太熟悉,不知道该在这里做什么,谷歌搜索也没有什么好处:如果出现特殊的1或非法参数,则为True:在某些情况下,我希望内置一些UI,以便创建一些跟踪/BI代码。在这种情况下,ClickOnce部署不合适。您需要将可执行文件复制到一个众所周知的位置,以便能够可靠地找到它。传递命令行参数也不再是问题。