Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Fehler beim Erzeugen COM-Objekt: Zugriff verweigert

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Fehler beim Erzeugen COM-Objekt: Zugriff verweigert

    Hi PHP-Forum,

    versuche unter WinXP Pro ein selbstentwickeltes COM-Objekt (MSVC 6.0) in PHP (5.1.1.1) serverseitig zu benutzen.

    Erhalte bei new COM( "abc.XYZ.1" ); folgende Fehlermeldung (Exception):

    Code=-2147024891
    Message=Failed to create COM object 'abc.XYZ.1': Zugriff verweigert
    File=C:\Programme\XYZ\bin\com.php
    Line=4

    COM-Objekt ist registriert.
    Das COM-Objekt ist benutzbar, z.B. aus VisualBasic-Umgebung.
    Ausführungsberechtigung für IUSR_[machinename] ist für angegebenes Verzeichnis gesetzt.

    ---------------------------

    $oCom = new COM("word.application");
    zeigt das gleiche Verhalten.

    Woran kann es liegen?

    Danke und viele Grüße
    Peter

  • #2
    Das solltest Du wohl besser in einem Windows/COM-Entwicklerforum fragen.

    Kommentar


    • #3
      Hi Bruchpilot,

      danke für das Feedback, aber bei "COM-Objekt in VB-Umgebung benutzbar" wird man mir im Windows/COM-Forum nicht weiterhelfen. Wollte damit auch nur sagen, dass es aus meiner Sicht nicht am COM-Objekt selbst liegt, sondern wohl eher ein Problem im Umfeld der PHP-Installation ist.

      Mit welchem User arbeitet denn PHP5 unter Windows/IIS 5.0 - ist dies der IUSR_[machinename] ?

      Weitere Hinweise sind willkomen!

      Viele Grüße
      Peter

      Kommentar


      • #4
        Mit welchem User arbeitet denn PHP5 unter Windows/IIS 5.0 - ist dies der IUSR_[machinename] ?
        ja

        Kommentar


        • #5
          php führt selbst kein impersonate durch. Es läuft also unter der Kennung, mit der es vom IIS aufgerufen wird. Das kann IUSR_[machinename] sein.

          Gibt
          PHP-Code:
          <?php echo '<pre>Kennung:'getenv('username'), '.</pre>'?>
          etwas brauchbares aus? (Vermutlich leider nicht)

          Kommentar


          • #6
            <?php echo '<pre>Kennung:', getenv('username'), '.</pre>'; ?>
            ... ja, das bleibt leer.

            Was aus meiner Sicht komisch ist:
            Wenn ich mit new COM( "irgendwas_mit_Programm_Oberfläche" ) arbeite, erscheint sofort der genannte Fehler, also bei meinem eigenen COM-Objekt, bei Excel und bei Word.
            Nehme ich ein Oberflächenfreies COM-Objekt, komme ich stets einen Schritt weiter. Soll heißen, dass new COM( "irgendwas_ohne_Oberfläche" ) funktioniert, aber der nächste Schritt geht schief.
            Beispiele:
            -----------------
            PHP-Code:
            <?php
            $oObj 
            = new COM"WScript.Shell" );
            $oObj->Run "notepad.exe");
            ?>
            Liefert "code=-2147352567 Message=Source: Unknown Description: Unknown"
            -----------------
            PHP-Code:
            <?php
            $oCom 
            = new COM("selbst.geschrieben");
            $oCom->EigeneMethode();
            ?>
            Liefert "PHP Fatal error: Call to undefined method com::EigeneMethode()"

            Weitere Ideen gesucht!

            Danke und viele Grüße
            Peter

            Kommentar


            • #7
              Wo sollte die jeweilige Oberfläche denn auch angezeigt werden?
              Diensten (wie dem IIS) ist es per default nicht erlaubt, auf den Desktop zuzugreifen. Warum sollte man auch einem Webserverprozess erlauben, den Desktop des Servers zuzumüllen?

              Zeigt
              PHP-Code:
              <?php
              $oCom 
              = new COM("selbst.geschrieben"); 
              com_print_typeinfo($oCom);
              ?>
              die gewünschte Methode an?

              Kommentar


              • #8
                also ich möchte keine Oberfläche auf dem Server benutzen, von der selbstgeschriebenen COM-Komponente mit Oberfläche nutze ich nur Methoden ohne UI. Alternativ habe ich noch eine COM-Komponente ohne UI.

                com_print_typeinfo($oCom);
                "selbst_geschrieben_mit_UI" .. da komme ich gar nicht so weit.

                "selbst_geschrieben_ohne_UI" ... liefert: "PHP Warning: Unable to find typeinfo using the parameters supplied in C:\Programme\xyz\com.php on line 9"

                "WScript.Shell" ... liefert was brauchbares.

                Hilft das weiter?

                Kommentar


                • #9
                  Ist das ein ATL Projekt?
                  Interface und KLassen durch die Assistenten vom DevStudio erstellt?
                  Welcher Typ wurde ausgewählt/Wurde ein dispinterface erstellt?

                  Kommentar


                  • #10
                    Uppps, jetzt kommen schwere Fragen, aber scheint in die richtige Richtung zu gehen:

                    - Habe das Projekt vom Kollegen übernommen.
                    - Wenn ich heute Methoden hinzufüge, mache ich dies manuell in *.idl, *.h und *.cpp
                    - ATL-Projekt, dispinterface erstellt? ... kann ich nicht beantworten, woran sieht man das?

                    Ausschnitt aus C++-Header:

                    class ATL_NO_VTABLE xyz :
                    public CComObjectRootEx<CComSingleThreadModel>,
                    public CComCoClass<xyz, &CLSID_XYZ>,
                    public ISupportErrorInfo,

                    public IDispatchImpl<Ixyz, &IID_Ixyz, &LIBID_XYZSVRLib>,

                    {

                    Kommentar


                    • #11
                      Hallo Bruchpilot,

                      jetzt habe ich die 7 Seiten unter

                      http://www.phpbuilder.net/columns/ve...01.php3?page=1

                      gelesen und ausgeführt und damit liefert dann auch
                      PHP-Code:
                      <?php
                      com_print_typeinfo
                      $oObj );
                      ?>
                      die Methoden und sie lassen sich auch aufrufen.

                      Danke an alle die mitgeholfen haben!
                      Peter

                      Kommentar


                      • #12
                        Und wieder was gelernt

                        Kommentar

                        Lädt...
                        X