[Gelöst]Fehlermeldung beim Aufruf auf Terminalserver

1. März 2016 17:42

Hallo Zusammen,

ich habe eine Codeunit erstellt die mir über den Automation Server ein Pfad aufruft und einen Parameter übergibt. Der Aufruf funktioniert überall nur nicht auf dem Terminalserver. Wenn ich mich mit einem Domänen Admin einlogge dann geht das auch auf dem Terminalserver. Bei allen anderen Usern funktioniert es nicht (selbst wenn ich diesem User testweise lokale Admin Rechte auf dem TS gebe). Ich erhalte beim Aufruf immer folgende Fehlermeldung:

Diese Meldung richtet sich an C/AL-Programmierer: Fehler beim Aufrufen von 'System.___ComObject.Run': Zugriff verweigert (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Es muss wohl eine GPO sein die das verhindert oder irgendetwas. Leider habe ich überhaupt keine Idee wo ich hier ansetzen soll.

Hier ist der Code:
Code:
Barcode_G := Rec.Barcode;
Pfad_G := STRSUBSTNO('\\hs-crm01\Software\smartNav\smartAxLink.exe SHOWPDF|int. BelegNr=%1', Barcode_G);


CLEAR(WshShell);
CREATE(WshShell,FALSE,TRUE);
WshShell.Run(Pfad_G);


Vielleicht kann jemand helfen.

Grüße
Paul
Zuletzt geändert von Pablo1985 am 5. März 2016 16:28, insgesamt 2-mal geändert.

Re: Fehlermeldung beim Aufruf auf Terminalserver

1. März 2016 17:47

Hallo,

wo läuft denn WSHELL, auf dem Client oder dem Servicetier?

und hat der entsprechende Benutzer die Berechtigung auf das Programm?

Gruß Fiddi

Re: Fehlermeldung beim Aufruf auf Terminalserver

1. März 2016 18:43

Hallo Fiddi,

leider bin ich mit dem Ganzen nicht so vertraut. Wo kann ich das nachsehen?
Ich habe eine Automation Variable erstellt 'Windows Script Host Object Model'.WshShell .. kann man anhand dieser etwas erkennen ?

Grüße
Paul

Re: Fehlermeldung beim Aufruf auf Terminalserver

1. März 2016 18:58

Hallo,

da es bei sich bei dir um eine Automation handelt, muss Sie auf dem Client (also dem Terminalserver) laufen.

Darf der Benutzer denn den dort angegeben Befehl von Hand ausführen (in exakt der Schreibweise wie beim WSHELL)?

Gruß Fiddi

Re: Fehlermeldung beim Aufruf auf Terminalserver

5. März 2016 11:07

Hi,

ich habe mal ein ähnliches Problem gehabt und das lag daran, dass der Pfad (UNC-Pfad) und die Anwendung dahinter nicht vertrauenswürdig waren.

Was passiert den, wenn du die Eingabeaufforderung öffnest (ohne Adminrechte) und den Befehl mal simulierst (auf dem Terminalserver).

Daher habe ich zwei Tipps für dich:

1.) Nehme den Pfad auf dem Terminalserver in den Internetoptionen (Intranet) in die sicheren Sites auf und versuche es erneut.
2.) Verwende anstatt der alten Automation lieber .NET. In deinem Beispiel würde das so aussehen:

Variablen (bei .NET Variablen Eigenschaften öffnen und RunOnClient auf Yes setzen):
Code:
Name   DataType   Subtype   Length
SystemDiagnosticsProcess   DotNet   System.Diagnostics.Process.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
SystemDiagnosticsProcessStartInfo   DotNet   System.Diagnostics.ProcessStartInfo.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
SystemDiagnosticsProcessWindowsStyle   DotNet   System.Diagnostics.ProcessWindowStyle.'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
CommandParameter   Text      
Barcode_G                     Text


Programmcode
Code:
Barcode_G := Rec.Barcode;

CommandParameter := STRSUBSTNO(SHOWPDF|int. BelegNr=%1', Barcode_G);

SystemDiagnosticsProcessStartInfo := SystemDiagnosticsProcessStartInfo.ProcessStartInfo(STRSUBSTNO('"%1"', '\\hs-crm01\Software\smartNav\smartAxLink.exe'), CommandParameter);
SystemDiagnosticsProcessStartInfo.WindowStyle(SystemDiagnosticsProcessWindowsStyle.Hidden);
SystemDiagnosticsProcess := SystemDiagnosticsProcess.Process;
SystemDiagnosticsProcess := SystemDiagnosticsProcess.Start(SystemDiagnosticsProcessStartInfo);
SystemDiagnosticsProcess.WaitForExit(2 * 60000);  //60000ms = 1 Min -> 2 Min TimeOut


Das hat mehrere Vorteile. Das läuft modal, es öffnet sich kein schwarzes Fenster, sodass man nicht sieht, dasa das System arbeitet und NAV wartet bis das Programm fertig ist. Evtl. kann man hier dann auch eine bessere Fehlermeldung sehen, aber es hängt wohl ganz klar mit Sicherheitseinstellungen deines Terminalservers zusammen.

VG
Robert
Zuletzt geändert von rwendler am 5. März 2016 18:22, insgesamt 4-mal geändert.

Re: Fehlermeldung beim Aufruf auf Terminalserver

5. März 2016 16:28

Hallo Robert,

vielen vielen Dank für deine ausführliche Antwort.
Ich habe zwischenzeitlich (eher durch Zufall) herausgefunden, dass es am UNC-Pfad liegt. Hatte aber keine andere Lösung bisher als dann ich die Anwendung lokal auf dem Terminalserver lege. Danach hat es auch funktioniert.
Allerdings ist deine Lösung viel besser. Das werde ich gleich mal testen. :)

Vielen Dank nochmals

Viele Grüße
Paul

Re: [Gelöst]Fehlermeldung beim Aufruf auf Terminalserver

5. März 2016 19:22

Hi Paul,

du kannst uns ja noch mal eine Info geben, ob es klappt :) Würde mich freuen Ursache und Lösung nochmal bestätigen zu können! :)