WSH - ActiveX-Komponenten kann kein Objekt erstellen: 'GetObject'

  • #1
B

Björn_2

Bekanntes Mitglied
Themenersteller
Dabei seit
09.07.2004
Beiträge
305
Reaktionspunkte
0
Hallo zusammen,

ich habe folgendes lauffähiges Script, dass auf den Rechnern in der Domain nicht funktioniert.

Code:
Include(IniFileClass.vbs)

 Dim objInifile
 Set objInifile   = new IniFile
 Set Application = GetObject(,Word.Application)
 
 Set Args = WScript.Arguments
 

' Show Last File key under Settings section of uedit32.ini (if exists)
 objInifile.FileName = l:\autoit\UserInfos.ini
 objInifile.Section = Args(0)
 objInifile.Key   = UserName
 Application.UserName = objInifile.Value
 objInifile.Key   = UserInitials
 Application.UserInitials = objInifile.Value
 objInifile.Key   = UserAddress
 Application.UserAddress = objInifile.Value
 If objInifile.Value <>  Then MsgBox objInifile.Value

 Set objInifile   = Nothing

Sub Include(strFilename)
 Dim objFileSys, objFile, strContent
 Set objFileSys = WScript.CreateObject(Scripting.FileSystemObject)
 Set objFile  = objFileSys.OpenTextFile(strFilename, 1)
 strContent   = objFile.ReadAll
 objFile.Close
 Set objFileSys = Nothing
 ExecuteGlobal strContent
End Sub

Die folgende Fehlermeldung erscheint, wenn ich das Script innerhalb der Domain starte:
Code:
Skript: l:\test.vbs
Zeile: 5
Zeichen: 3
Fehler: ActiveX-Komponenten kann kein Objekt erstellen:->GetObject'
Code: 800A01AD
Quelle: Laufzeitfehler in Microsoft VBScript

Ich vermute, dass es durch irgendwelche Sicherheitseinstellungen geblockt wird. Habe aber keine Ahnung welche das sein könnten. Vielleicht liegt ja auch ein anderes Problem vor.

Wäre nett, wenn ihr mir helfen könntet

Gruß
Björn
 
  • #2
Woran es liegen könnte:
getobject() funzt nur, wenn bereits eine Instanz von Word geöffnet ist. Wenn Du createobject() nimmst, wird eine neue Instanz geöffnet, falls noch keine existiert.
 
  • #3
Hallo,

@Fogelschwarm:

GetObject() funzt auch dann, wenn du der Funktion einen File-Moniker als Parameter übergibst! Da braucht KEINE Word-Instanz aktiv zu sein!

Code:
Set objWord = GetObject(c:\wordDocs\wordbrief.doc)

Wenn GetObject() folgendermassen eingesetzt wird:

Code:
Set objWord = GetObject(Word.Application)

sucht es zuerst in einer COM-internen Tabelle (ROT = Running Object Table)! Wird dort eine aktive Word-Instanz gefunden, wird diese verwendet, ansonsten arbeitet die Funktion wie CreateObject().

@Björn_2:
Wenn du magst, kannst du mir das Script mal zusenden. Ich versuche es dann ans Laufen zu bekommen!

[email protected]

Gruss

Reiner
 
  • #4
GetObject() funzt auch dann, wenn du der Funktion einen File-Moniker als Parameter übergibst!
Ja, aber das hat er nicht getan. Zu erkennen an dem führenden Komma in der Argumenteklammer, welches Du in Deinem Beispiel vergessen hast.
 
  • #5
Hallo,

das Komma habe ich nicht vergessen, das habe ich absichtlich weggelassen!

@Björn_2:
Das solltest du auch tun, dann geht's nämlich...

Gruss

Reiner
 
  • #6
das Komma habe ich nicht vergessen, das habe ich absichtlich weggelassen!
Wenn man das Komma wegläßt, gibts ne Fehlermeldung, da Word.Application dann als Dateiangabe interpretiert wird. Schließlich muß die Reihenfolge der Argumente ja gewahrt bleiben, auch wenn man manche Args optional weglassen kann.
 
  • #7
Hallo,

vielen Dank schon mal für eure Hilfe. Ich habe das ganze auch mal mit CreateObject versucht. Auch das lief nicht. Prinzipiell funktioniert das Skript ja. Ich habe die gleiche Version auf einem XP-Rechner laufen lassen und es funktionierte egal ob Word geöffnet war oder nicht.
Allerdings läuft es nicht auf den Rechnern, auf denen es später eingesetzt werden soll. Deshalb vermute ich, dass es durch irgendwelche Sicherheitseinstellungen geblockt wird.

Gruß
Björn
 
  • #8
@Fogelschwarm:

Es gibt KEINE Fehlermeldung wenn man das Komma weglässt!
Wie wärs, wenn du das folgende Script einfach mal ausprobierst?

Code:
Dim objWord
Dim objWordApp

On Error Resume Next
Set objWord = GetObject (c:\xyz.doc)
If err.number <> 0 Then
 WScript.echo(Kann WORD-Instanz nicht erstellen:  & err.description)
End If
err.Clear
Set objWordApp = objWord.Application
objWordApp.Visible = True
WScript.quit(0)

Gruss

Reiner
 
  • #9
Es gibt KEINE Fehlermeldung wenn man das Komma weglässt!
Natürlich gibt es keine Fehlermeldung, wenn man das ZWEITE Argument wegläßt. Wenn man aber das ERSTE wegläßt, und das tut Björn_2, dann muß man ein Komma setzen, damit der WSH erkennt, daß das übergebene Argument das Zweite und nicht das Erste ist.

GetObject(,Word.Application)
Interpretation: Pfadname=weggelassen, ID=Word.Application
=> keine Fehlermeldung

GetObject(Word.Application)
Interpretation: Pfadname=Word.Application, ID=weggelassen
=> Fehlermeldung, da Word.Application keine existierende Datei

GetObject (c:\xyz.doc)
Interpretation: Pfadname=c:\xyz.doc, ID=weggelassen
=> keine Fehlermeldung, da existierende Datei
 
  • #10
Hallo

@ReinerZ:
Ich habe dein Testscript ausgeführt und es läuft. Ich konnte sogar auch die Benutzerinformationen setzen. Leider habe ich es bisher noch nicht geschafft, dass die Informationen aus der ini-Datei gelesen werden. Das Script findet aus irgendeinen Grund die ini-Datei nicht.

Eins interessiert mich aber noch. Wieso kann ich das Testscript auf dem Domain-Rechner ausführen und meines nicht. Wo ist der Unterschied?

Gruß
Björn
 
  • #11
Wieso kann ich das Testscript auf dem Domain-Rechner ausführen und meines nicht.
Auch wenn es hier schon mehrfach steht: Der entscheidende Unterschied könnte darin liegen, daß die eine Version eine existierende Wordinstanz verlangt, die andere aber nicht.
Noch vor meinem ersten Posting habe ich Dein Skript bei mir getestet und genau dieses Ergebnis erhalten. Bei geöffnetem Word funzte es, ansonsten bekam ich dieselbe Fehlermeldung wie Du.
Du schriebst ja, daß Du es auch mit CreateObject() versucht hättest. Hast Du da denn da auch das Komma vor der ID weggelassen? Dort ist die ID nämlich das erste Argument.
 
  • #12
Fogelschwarm schrieb:
Auch wenn es hier schon mehrfach steht: Der entscheidende Unterschied könnte darin liegen, daß die eine Version eine existierende Wordinstanz verlangt, die andere aber nicht.
Wie gesagt, auf dem einen Rechner funktioniert das Script egal ob eine Wordinstanz geöffnet ist oder nicht. Auf dem anderen Rechner funktioniert es nur, wenn Word geöffnet ist. Deshalb möchte ich gerne herausfinden, warum sich das Script unterschiedlich auf verschiedenen Rechnern verhält. Irgendwelche Einstellungen auf dem PC selber müssen, meiner Meinung nach, das Verhalten des Scriptes beeinflussen. Mein Problem hat wahrscheinlich weniger mit dem Script selber als mit den Rechnerkonfigurationen zu tun.

Fogelschwarm schrieb:
Noch vor meinem ersten Posting habe ich Dein Skript bei mir getestet und genau dieses Ergebnis erhalten. Bei geöffnetem Word funzte es, ansonsten bekam ich dieselbe Fehlermeldung wie Du.
Greifen vielleicht die Einstellungen im IE für ActiveX oder hat das nichts mit ActiveX zu tun. Gibt es sonst noch irgendwo Sicherheitseinstellungen, die Windows Scripts einschränken? Könntest du mir bitte mal deine Sicherheitseinstellungen posten, dann kann ich die mit meinen vergleichen.

Fogelschwarm schrieb:
Du schriebst ja, daß Du es auch mit CreateObject() versucht hättest. Hast Du da denn da auch das Komma vor der ID weggelassen? Dort ist die ID nämlich das erste Argument.
Das habe ich. Es gibt, glaube ich auch eine Fehlermeldung, wenn man das nicht macht.

Vielen Dank

Gruß
Björn
 
  • #13
Wie gesagt, auf dem einen Rechner funktioniert das Script egal ob eine Wordinstanz geöffnet ist oder nicht.
Das widerspricht aber dem, was Microsoft in der Dokumentation des WSH schreibt. Entweder ist das falsch, oder bei Dir ist vielleicht doch eine Instanz offen, ohne daß Du es merkst. Keine Ahnung, vielleicht vom Office-Autostart?
Greifen vielleicht die Einstellungen im IE für ActiveX oder hat das nichts mit ActiveX zu tun. Gibt es sonst noch irgendwo Sicherheitseinstellungen, die Windows Scripts einschränken? Könntest du mir bitte mal deine Sicherheitseinstellungen posten, dann kann ich die mit meinen vergleichen.
Ich denke es IST ActiveX, aber mit dem IE hat das nichts zu tun, denn Du führst es ja nicht darin aus. Meine Sicherheitseinstellungen im IE sind auch ganz einfach: Da ich ihn nicht benutze, habe ich alles (Scripting, ActiveX, Java etc.) deaktiviert. Und das in allen Zonen. Sogar in der Arbeitsplatzzone, deren Anzeige bei den Einstellungen erst in der Registry freigeschaltet werden muß.
Andere Einstellungsmöglichkeiten sind mir nicht bekannt. Muß aber natürlich nichts heißen ..
 
  • #14
Nur eine Bemerkung nebenbei:
@Björn: Du hast Recht. Ich hatte einige Seiten, bei denen getObject Jahrelang ging. Seit 2 Monaten habe ich auf ALLEN Rechnern in der Domain die hier genannte Fehlermeldung (win2000/xp -Mix.
Ich habe keine Policys in Bezug auf IE-Sicherheit geändert. Jedoch wird öfters upgedatet.

Nochmals : genau auf diesen Rechnern ging das Teil noch vor 2 Monaten.
 
  • #15
@RON(Gast)
Das ist aber eine andere Sache. Bei Seiten (VBS innerhalb HTML) ist ja auch der IE dafür zuständig und damit greifen auch seine Sicherheitseinstellungen.
 
Thema:

WSH - ActiveX-Komponenten kann kein Objekt erstellen: 'GetObject'

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben