Windows Script Host, RUN

12. Januar 2007 17:06

Hallo,

ich versuche ein externes Programm aus Navision zu starten.

Leider kann Navision mit folgenden Zeilen offensichtlich nichts anfangen:

Variabel:
wsh - Automation - 'Windows Script Host Object Model'.WshShell

C/AL:
Create(wsh);
wsh.Run('C:\WINNT\System32\notepad.exe',1,false);
clear(wsh);


Laut folgendem Beitrag soll´s aber genauso laufen:
http://blog.veloursnebel.de/CategoryVie ... ision.aspx

Ich finde meinen Fehler einfach nicht! Hat jemand eine Idee?

Gruß

12. Januar 2007 17:24

Deklariere deine Variable vom Typ Application statt WshShell (ist jetzt blind geraten, also erst recht ohne Gewähr ;-))

12. Januar 2007 17:33

Hi Natalie,

das verstehe ich jetzt nicht ganz, sorry.

Also nicht mit Script Host?

Danke

12. Januar 2007 17:35

Doch doch ... aber wenn du die Automation-Variable anlegst und dafür den Namen aus der Liste aller verfügbaren Automation-Server-Namen auswählst, bekommst du in der Subform eine Auflistung aller "Classes".
Wähle hier statt "WshShell" die Class "Application".

12. Januar 2007 17:42

Ja, ok, aber leider gibt es diese "Class" nicht.

12. Januar 2007 17:43

Schade - dann schreib doch dem Blog-Schreiber? Vielleicht liegt der Fehler aber auch an deiner Navision-Version?

12. Januar 2007 18:01

Beim testen von Beispielen im allgemeinen sollte man sich zunächst strikt an die Vorgaben halten, um eigene Fehler auszuschließen. In deinem Fall also, wie im Beitrag, den Code komplett benutzen inkl. der Variablen "windowMode" und "waitOnReturn":

Code:
Variablen:
   wsh   Automation   'Windows Script Host Object Model'.WshShell   
   windowMode   Integer      
   waitOnReturn   Boolean      

CODE:
   windowMode := 1;
   waitOnReturn := FALSE;

   CREATE(wsh);
   wsh.Run('c:\windows\system32\notepad.exe', windowMode, waitOnReturn);
   CLEAR(wsh);


Run() erwartet nämlich tatsächlich Variablen, da diese als VAR (Referenz) übergeben werden:

Code:
   [INT Run :=] wsh.Run(BSTR Command[, VAR VARIANT WindowStyle][, VAR VARIANT WaitOnReturn])


Geht mir aber auch oft genug so, dass ich Beispiele nur "halb" teste und dann auf die Fehlersuche gehe ;-)

12. Januar 2007 18:25

Hi SilverX,

danke, aber das hab ich bereits getestet. Das ist es nicht. Folgende Fehlermeldung erscheint:

Navision hat geschrieben:"Dieser Datentyp wird von C/SIDE nicht unterstützt. Sie haben Zugriff auf Daten von einem der folgenden Datentypen:

VT_VOID,VT_12,VT_I4,VT_R4,VT_R8,VT_CY,VT_DATE,VT_BSTR and VT_BOOL"


Eine Alternative hab ich bereits herausgefunden:

wsh.Exec('c:\windows\system32\notepad.exe');

Mit dieser Zeile scheint es zu laufen, aber ich sehe das Fenster kurz aufflackern. Ich kann bei dieser Zeile keinen zusätzlichen Parameter mitgeben, die das Fenster ausblenden könnten.

Noch ´ne Idee?

12. Januar 2007 19:01

Sehr komisch. Importier mal bitte die folgende Codeunit (ggf. vorher Objekt Nr. von 50000 in was passenderes ändern) uns starte sie:

Code:
OBJECT Codeunit 50000 Start Notepad
{
  OBJECT-PROPERTIES
  {
    Date=12.01.07;
    Time=17:55:51;
    Modified=Yes;
    Version List=;
  }
  PROPERTIES
  {
    OnRun=BEGIN
            StartNotepad();
            EXIT;
          END;

  }
  CODE
  {

    PROCEDURE StartNotepad@1000000093();
    VAR
      wsh@1000000002 : Automation "{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} 1.0:{72C24DD5-D70A-438B-8A42-98424B88AFB8}:'Windows Script Host Object Model'.WshShell";
      windowMode@1000000000 : Integer;
      waitOnReturn@1000000001 : Boolean;
    BEGIN
      windowMode := 1;
      waitOnReturn := FALSE;

      CREATE(wsh);
      wsh.Run('c:\windows\system32\notepad.exe', windowMode, waitOnReturn);
      CLEAR(wsh);
    END;

    BEGIN
    END.
  }
}

13. Januar 2007 09:43

Danke SilverX für deine Bemühungen, aber schon beim Speichern meckert Navision mit oben genannter Meldung.
Ich hab also gar keine Möglichkeit die Zeile "wsh.Run" zum Laufen zu bringen.

Kann es vielleicht sein, dass die Zeile grundsätzlich nicht unter Windows 2000 oder Navision 2.6 läuft? Ich versteh´s nicht!

Vielleicht noch ´ne andere Idee zu meinem Problem?

13. Januar 2007 11:11

Jetzt wirds komisch...

C:\WINDOWS\System32\wshom.ocx müsste die Datei dafür sein (zumindest unter XP). Versuch die mal neu zu registrieren (regsvr32 /u wshom.ocx und regsvr32 wshom.ocx).

Ggf. hilft die Position des Cursors nach der Fehlermeldung noch weiter.

13. Januar 2007 11:38

Ok, habe beides ausprobiert:

"regsvr32 wshom.ocx"
Reaktion unverändert, Meldung beim Speichern bleibt wie oben beschrieben.

"regsvr32 /u wshom.ocx":
Meldung beim Speichern: "Die gewählte Type Library konnte nicht geladen werden."

Der Cursor steht in beiden Fällen zwischen RUN und der Klammer
(wsh.run('blabla')).

Übrigens funktioniert Sendkey neben exec einwandfrei, offensichtlich macht nur RUN Probleme.

Übrigens: Aus einem VBS-Script läuft auch der RUN-Befehl so wie er soll! Nur aus Navision nicht!

13. Januar 2007 14:39

Dann muss ich sagen, bin ich nun ratlos... ggf. könntest du nun noch eine vbs datei erstellen uns diese ausführen. Ggf. auch per File temp. erstellen, ausführen und dann löschen.

15. Januar 2007 17:30

Hi,

versuche mal folgendes. Nimm fuer die Variable "WindowMode" testhalber den Typ "Variant" anstatt "Integer".
Moeglicherweise ist bei deinem Rechner aber auch etwas nicht in Ordnung. Hast du die Moeglichkeit, das auf einem frisch installiertem Rechner zu testen?

Gruesse
feri

16. Januar 2007 09:42

Hi feri,

danke für deine Hilfe.

Typ "Variant"? Hab ich leider nicht zur Auswahl.

Ein Rechner-Problem scheint mir unwahrscheinlich, da ich selben Effekt sowohl auf meinem Desktop (Win2000) als auch auf meinem Laptop (WinXP) habe. In einem VBS-Script läuft´s ja auch.

Gibt es vielleicht eine zusätzliche Lizenz oder Einstellung, die dafür verantwortlich sein könnte?

Hat das denn schon mal jemand bei "2.6" geschafft? Vielleicht geht das ja erst ab 3.7 oder 4.0.