Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno [Delphi] Program neběží korektně mimo IDE

Ahojte. Mám následující program (klidně ho sem plácnu celý, je to maličká utilitka):

program runreport;

{$APPTYPE CONSOLE}

uses
  SysUtils, MConnect, ComObj, ActiveX;

var RepParam:String;
var dcom1: TDCOMConnection;

procedure VypisHelp();
begin
WriteLn ('Spouští report na vzdáleném serveru.');
WriteLn('');
WriteLn('runreport [/report] [název reportu]');
WriteLn('');
WriteLn('/report název reportu: spustí report "název reportu."');
WriteLn('/?: zobrazí tuto nápovedu');
end;

procedure CheckParam();
begin
if ParamStr(2)='' then WriteLn('Parametr je prázdný!')
        else try
        RepParam:=ParamStr(2);
        CoInitialize(nil);
        dcom1:=TDCOMConnection.Create(nil);
        dcom1.ComputerName:='SRV02';
        dcom1.LoginPrompt:=False;
        dcom1.ServerGUID:='{57131FF5-58C4-4F1C-BDEF-F45A71C369A1}';
        dcom1.ServerName:='MailResServer.clMailRes';
        dcom1.Connected:=True;
        dcom1.AppServer.GenReport(RepParam);
        CoUninitialize;
        WriteLn('Odesláno na server s parametrem' + ' ' + RepParam);
        except
        WriteLn ('Neco se posralo');
        exit;
        end;
end;

begin
if ParamStr(1) = '/?' then VypisHelp()
        else if ParamStr(1)= '/report' then CheckParam()
                else WriteLn ('Zadán nesprávný nebo prázdný parametr.');
end.

V IDE má nastavené parametry /report PARAMETR. Mačkám-li Shift-F7 a procházím-li skrz kód, program udělá co má a Delphi proti němu naprosto neprotestují.

Leč spuštěný z komandlajny (Windows 2003 Server, je to to samé PC) tento kód mezi try..except se neprovede (jak jsem zjistil zakomentováváním):

        dcom1.Connected:=True;
        dcom1.AppServer.GenReport(RepParam);

Prostě to nic neudělá. A teď babo raď :-/ Doteď jsem byl zvyklý, že moje chyby najde debugger, ale v tomhle případě vážně nevím, jak dál... "Programátor" jsem jen sváteční, takže čekám nějaké rozuzlení (nejen) od místních delphi gurus, JF a Rce ;-)

Předmět Autor Datum
Neudělá to lautr nic, ani to nevypíše ten "WriteLn('Odesláno na server s parametrem' + ' ' + RepPara…
Rce 28.08.2006 01:27
Rce
Vypíše to "něco se posralo", protože to připojení dcom klienta, tedy dcom1.Connected:=True; se nep…
Vladimir 28.08.2006 01:40
Vladimir
Aha! Tak to bude něco časově závislého, co se v runtime "rovnejma nohama" (z exe) nestihne a složí s…
Rce 28.08.2006 01:55
Rce
Vyřešeno! Jsem dement 8-) Tu komandlajnu jsem měl puštěnou několik dní a zapoměl jsem, že jsem ji po…
Vladimir 28.08.2006 02:11
Vladimir
No, neviem google o tej komponente najde len same blbosti, ale nemal by si pouzit dcom1.Open() ? a p…
MM.. 28.08.2006 02:09
MM..
dcom1.Open() a dcom1.Connected:=True by mělo (možná :-)) být rovnocenné. Connected by se testovat ro… poslední
Rce 28.08.2006 02:16
Rce

Vypíše to "něco se posralo", protože to připojení dcom klienta, tedy

dcom1.Connected:=True;

se neprovede (a logicky pak to následující volání rozhraní serveru).

Odesláno atd. to vypíše pouze, když ty dva zmíněné řádky zakomentuju, takže to má šanci doběhnout až tam.

Nejvíc mě vytáčí že v IDE to funguje ]:(

Aha! Tak to bude něco časově závislého, co se v runtime "rovnejma nohama" (z exe) nestihne a složí se to na chybu. Při krokování v IDE to projde, neb se to krokuje pomalu. Doporučuji na chvíli vyhodit (zakomentovat) to try--except aby bylo vidět, co to hlásí za chybu (protože chyba někde vypukla). Pak budeme moudřejší.

Vyřešeno! Jsem dement 8-) Tu komandlajnu jsem měl puštěnou několik dní a zapoměl jsem, že jsem ji pouštěl pod jiným uživatelem než ty Delphi. A samozřejmě ten uživatel pod kterým jsem to pouštěl neměl práva na aktivaci toho COM+ serveru. Program funguje jak má. A můžu jít spát :-p

PS. i tak díky za pomoc, i když jsem mátl informacemi

No, neviem google o tej komponente najde len same blbosti, ale nemal by si pouzit dcom1.Open() ? a prip. potom testovat to "Connected"? (skus googlit najdes nejake diskusie o tom, alebo mas k tomu TDCOMConnection nejaky reference manual?).

Je mozne ze delphi ako aplikacia to uz ma otvorene alebo co, a ty nieco nerobis co uz urobilo delphi pre seba ako aplikaciu...

Alebo moze byt rozdiel medzi debug verziou a release verziou, skus vytvorit a spustit debug verziu (nastavenia projektu resp. linkera).

P.S. alebo to co pise Rce vyssie, skus to v debuggeri nekrokovat ale pustit to "go to cursor" alebo si nastav breakpointy a spust v delphi debbugeri go (po breakpoint), ci to vyleti do toho except ak to spustis rychlo...

dcom1.Open() a dcom1.Connected:=True by mělo (možná :-)) být rovnocenné. Connected by se testovat rozhodně mělo. TDCOMConnection realizuje jen spojení, problém bude v tom Serveru. Mám pocit, že se má zadávat buď GUI a nebo ServerName - ale nadbytečné zadání (v tomto případě) GUI asi na závadu nebude. Nejlépe je vyhodit ten try--except a uvidíme, co to hlásí za chybu.

//Edit: éééch, mezitím vyřešeno (patrně tou chybovou hláškou :))). Tak hlavně, že to chodí. Dobrou noc, Vladimíre :beer::beer::beer:

Zpět do poradny Odpovědět na původní otázku Nahoru