如何从命令行制作 delphi VCL 应用程序 运行
How to make delphi VCL application run from the command line
我在 Delphi 10.2 中有一个 VCL 应用程序。
用户应选择一些设置,然后按“运行”按钮。
现在,我希望此应用每天自动 运行 一次(使用 Windows 中的任务计划程序),并使用用户已在应用中设置的设置。所以我需要从命令行解决 运行 “运行” 按钮例程。
我怎样才能让这个应用程序不打开主窗体,而是 运行 在幕后,使用所选的设置?
据我所知,我应该制作另一个单元 运行 来自主 VCL 应用程序的一些脚本,将获取设置并将它们作为参数传递给将调用的函数“运行”按钮例程。
但是在这里,当任务计划程序 运行 应用程序而不是用户时,我无法弄清楚如何 运行 这个单元而不是主窗体。
或者可能有不同的解决方案?
有人可以帮忙吗?
您可以为 exe 使用命令行参数,运行 相应地为应用程序使用命令行参数。
读取命令行参数使用函数ParamStr
(当你只使用一个命令行参数时,你可以使用ParamStr(1)
读取第一个也是唯一的参数)。
当你需要有更多的命令行参数时,然后使用ParamCount
遍历所有可用的参数。
根据您想要 运行 您的“运行”代码并显示您的配置表单的方式,您可以将项目 .dpr
文件编辑为 show/create当您 运行 处于“配置”模式的应用程序时的主窗体,在其他情况下执行“运行”代码。
program MyProgram;
uses
Vcl.Forms,
ConfigFormUnit in 'ConfigFormUnit.pas' {ConfigForm},
RunCodeUnit in 'RunCodeUnit.pas';
{$R *.res}
begin
Application.Initialize;
if ParamStr(1) = 'run' then
ExecuteRunCode
else begin
Application.MainFormOnTaskbar := True;
Application.CreateForm(TConfigForm, ConfigForm);
end;
Application.Run;
end.
例程ExecuteRunCode
是其中一个单元中的public例程,其中包含您要在'Run'模式下运行的代码。 (在示例中单位 RunCodeUnit.pas
)。
unit RunCodeUnit;
interface
procedure ExecuteRunCode;
implementation
procedure ExecuteRunCode;
begin
// Code to run
end;
end.
当然,您可以创建两个单独的程序,每个程序都有自己的特定代码,但是如果您 want/need.
您可能想要创建仅命令行版本的应用程序。这在 Delphi 术语中被命名为“console mode
”应用程序(文件/新建/控制台应用程序)。
您可以使用 ParamStr
和 ParamCount
访问命令行参数。
如果您同时需要命令行和 GUI 应用程序,请将所有非 GUI 代码放在一个单元中,将其封装在 class 中或作为标准函数。您可以从 GUI 应用程序和控制台模式应用程序使用该单元。
顺便说一句,始终将用户界面与业务代码分开是一个很好的设计。您在这里有一个很好的例子来说明这种需求:您可以使用 GUI 应用程序或命令行应用程序中的代码,也可以从服务应用程序或 DLL 中使用它。
我在 Delphi 10.2 中有一个 VCL 应用程序。 用户应选择一些设置,然后按“运行”按钮。
现在,我希望此应用每天自动 运行 一次(使用 Windows 中的任务计划程序),并使用用户已在应用中设置的设置。所以我需要从命令行解决 运行 “运行” 按钮例程。
我怎样才能让这个应用程序不打开主窗体,而是 运行 在幕后,使用所选的设置?
据我所知,我应该制作另一个单元 运行 来自主 VCL 应用程序的一些脚本,将获取设置并将它们作为参数传递给将调用的函数“运行”按钮例程。 但是在这里,当任务计划程序 运行 应用程序而不是用户时,我无法弄清楚如何 运行 这个单元而不是主窗体。
或者可能有不同的解决方案?
有人可以帮忙吗?
您可以为 exe 使用命令行参数,运行 相应地为应用程序使用命令行参数。
读取命令行参数使用函数ParamStr
(当你只使用一个命令行参数时,你可以使用ParamStr(1)
读取第一个也是唯一的参数)。
当你需要有更多的命令行参数时,然后使用ParamCount
遍历所有可用的参数。
根据您想要 运行 您的“运行”代码并显示您的配置表单的方式,您可以将项目 .dpr
文件编辑为 show/create当您 运行 处于“配置”模式的应用程序时的主窗体,在其他情况下执行“运行”代码。
program MyProgram;
uses
Vcl.Forms,
ConfigFormUnit in 'ConfigFormUnit.pas' {ConfigForm},
RunCodeUnit in 'RunCodeUnit.pas';
{$R *.res}
begin
Application.Initialize;
if ParamStr(1) = 'run' then
ExecuteRunCode
else begin
Application.MainFormOnTaskbar := True;
Application.CreateForm(TConfigForm, ConfigForm);
end;
Application.Run;
end.
例程ExecuteRunCode
是其中一个单元中的public例程,其中包含您要在'Run'模式下运行的代码。 (在示例中单位 RunCodeUnit.pas
)。
unit RunCodeUnit;
interface
procedure ExecuteRunCode;
implementation
procedure ExecuteRunCode;
begin
// Code to run
end;
end.
当然,您可以创建两个单独的程序,每个程序都有自己的特定代码,但是如果您 want/need.
您可能想要创建仅命令行版本的应用程序。这在 Delphi 术语中被命名为“console mode
”应用程序(文件/新建/控制台应用程序)。
您可以使用 ParamStr
和 ParamCount
访问命令行参数。
如果您同时需要命令行和 GUI 应用程序,请将所有非 GUI 代码放在一个单元中,将其封装在 class 中或作为标准函数。您可以从 GUI 应用程序和控制台模式应用程序使用该单元。
顺便说一句,始终将用户界面与业务代码分开是一个很好的设计。您在这里有一个很好的例子来说明这种需求:您可以使用 GUI 应用程序或命令行应用程序中的代码,也可以从服务应用程序或 DLL 中使用它。