Hallo zusammen,
habe folgendes Problem: Ich starte aus meinem Delphi-Programm ein DTS-Paket und warte bis es beendet ist. Da ganze klappt auch mit der unten dargestellten Routine. Nur leider wird dass DTS-Paket dann auf dem Rechner ausgeführt, auf dem auch mein Delphi-Programm läuft. Gibt es eine Möglichkeit, das DTS-Paket aus dem Delphi-Programm heraus zu starten, aber zu sagen, dass es auf dem Server ablaufen soll, auf dem es auch gespeichert ist. Weiterhin wäre es noch wichtig auch weiterhin die Rückmeldung zu erhalten, wenn das Paket beendet wurde.
Die Ausführung des DTS-Paketes soll schließlich nicht die Ressourcen des lokalen PC in Anspruch nehmen, sondern vom Server selbst abgearbeitet werden.
Delphi-Quellcode:
function Tfrmmain.dts_run(dts:string): boolean;
var
SEInfo: TShellExecuteInfo;
ExitCode: DWORD;
ExecuteFile, ParamString, StartInString: string;
ok : boolean;
begin
//DTS-Dienst auf Server
ExecuteFile:='\\servername\pfad\dtsrun';
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
with SEInfo do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := PChar(ExecuteFile);
//DTS-Paket (Parameter: /Server /User /Password /DTS-Paket)
lpParameters := PChar(dts);
nShow := SW_SHOWMINNOACTIVE;
end;
if ShellExecuteEx(@SEInfo) then
begin
frmmain.Enabled := false;
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
//Warten bis Dienst beendet ist
frmmain.Enabled := true;
Application.BringToFront;
ok := true;
end
else ok := false;
end;