我正在构建一个Windows服务应用程序,它具有将其编译为基本Windows应用程序的配置。 exe的主项目文件包括条件,用于确定项目是作为服务应用程序还是作为Windows窗体应用程序编译。
问题是,当我做一些使项目代码发生变化的事情时,代码会被破坏和破坏。例如,一行Application.Initialize;
变为AppliApplication.Initialize;
,而{$R *.RES}
行变为S}
,我的大多数条件都会被删除。
我想知道是否有办法克服这个问题,如果有任何伎俩,或者我只是咧嘴笑着忍受它?
以下是我希望保留的文件......
program JDRMServer;
uses
{$IFDEF TESTAPP}
FastMM4,
Vcl.Forms,
{$ELSE}
Vcl.SvcMgr,
{$ENDIF TESTAPP}
uJDRMServer in 'uJDRMServer.pas' {JDRMSvr: TService},
uJDRMSessions in 'uJDRMSessions.pas',
uJDRMSvrCli in 'uJDRMSvrCli.pas',
uJDRMSvrDsh in 'uJDRMSvrDsh.pas',
JDDB in 'JDDB.pas',
uJDRMServerTEST in 'uJDRMServerTEST.pas' {JDRMSvrTest},
uJDRMServerThread in 'uJDRMServerThread.pas',
uJDRMSvrMessages in 'uJDRMSvrMessages.pas';
{$R *.RES}
begin
{$IFDEF TESTAPP}
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TJDRMSvrTest, JDRMSvrTest);
{$ELSE}
if (not Application.DelayInitialize) or (Application.Installing) then
Application.Initialize;
Application.CreateForm(TJDRMSvr, JDRMSvr);
{$ENDIF TESTAPP}
Application.Run;
end.
答案 0 :(得分:5)
正如大卫所说,你坚持让IDE相信dpr是它自己的私人后院。最简单的解决方案是将所有内容放在一个单独的单元中,并从dpr的uses子句中删除条件。无论如何,FastMM将在您的服务版本和测试应用程序中派上用场,并且vcl.forms和vcl.svcMgr之间的区别可以在该单独的单元中进行。
dpr将减少为:
uses
FastMM4,
YourAppMain,
uJDRMServer,
uJDRMSessions,
uJDRMSvrCli in 'uJDRMSvrCli.pas',
uJDRMSvrDsh in 'uJDRMSvrDsh.pas',
JDDB in 'JDDB.pas',
uJDRMServerTEST in 'uJDRMServerTEST.pas' {JDRMSvrTest},
uJDRMServerThread in 'uJDRMServerThread.pas',
uJDRMSvrMessages in 'uJDRMSvrMessages.pas';
{$R *.RES}
begin
YourAppMain.Execute;
end;
您的主应用程序单元将从dpr中获取其余代码:
unit YourAppMain;
interface
procedure Execute;
implementation
uses
{$IFDEF TESTAPP}
Vcl.Forms,
{$ELSE}
Vcl.SvcMgr,
{$ENDIF TESTAPP}
OtherUnits;
procedure Execute;
begin
{$IFDEF TESTAPP}
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TJDRMSvrTest, JDRMSvrTest);
{$ELSE}
if (not Application.DelayInitialize) or (Application.Installing) then
Application.Initialize;
Application.CreateForm(TJDRMSvr, JDRMSvr);
{$ENDIF TESTAPP}
Application.Run;
end;
end.
答案 1 :(得分:3)
简单的答案是创建一个不同的项目并将其用作独立版本。这就是我对我的服务所做的事情,这意味着你可以使用其他条件来适应每种模式。
答案 2 :(得分:2)
是的,IDE会这样做并且始终如此。没有已知的方法来阻止它表现得那样。你只需要搞砸它。
我有类似的条件,我处理它们的方式是使用我的修订控制系统来帮助我在提交时撤消IDE所做的更改。因此,每当我签入.dpr文件时,我都会检查这些差异并恢复虚假的文件。
我还尝试通过编辑.dpr文件来添加和删除项目中的单元,而不是让IDE执行此操作。这往往会降低虚假模式的发生率。