Laden...

Zugriff auf Visio bei Virtualisierung

Erstellt von Andreas@Tricept vor 15 Jahren Letzter Beitrag vor 12 Jahren 3.042 Views
A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 15 Jahren
Zugriff auf Visio bei Virtualisierung

Hallo,

ich habe gerade ein Problem mit einem Kunden wo ich aus eigener Kraft nicht weiterkomme.
Er benutzt Die Microsoft Virtualisierung Softgrid.
Meine Software verwendet eingebettet Microsoft Visio.

Wenn der Kunde Jedoch zu dem Punkt kommt wo dieses Visio angezeigt werden soll stürzt das Programm ab, weil die Visio Klasse nicht regestriert sein soll.

Die wichtige DLL (Microsoft.Office.Interop.Visio.dll) die ich dazu brauche lässt sich mit Assembly.Load auch fehlerlos laden.
Visio kann in der Umgebung auch eigenständig problemlos gestartet werden.

Die Fehlermeldung der fehlenden Registration:> Fehlermeldung:

Klasse nicht regestriert (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Hat jemand Erfahrungen? Bzw Lösungsansätze?

A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 12 Jahren

Hm habe immer noch diesen Fehler. Konnte jedoch kleinere Fortschritte machen.
Es geht darum das der Kunde kein Visio in meiner Anwendung aufrufen kann.

er erhält folgende Meldung:> Fehlermeldung:

Eine externe Komponente hat eine Ausnahme ausgelöst.

bei System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)
bei System.Windows.Forms.AxHost.CreateWithoutLicense(Guid clsid)
bei System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)
bei System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)
bei System.Windows.Forms.AxHost.CreateInstance()
bei System.Windows.Forms.AxHost.GetOcxCreate()
bei System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)
bei System.Windows.Forms.AxHost.CreateHandle()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.AxHost.EndInit()
bei MV2007.Gui.Themen.Architektur.VisioPlan.InitializeComponent()
bei MV2007.Gui.Themen.Architektur.VisioPlan.Initialize()
bei MV2007.Gui.Themen.Architektur.Bebauungsplan.ucBebauungsplan.Initialize()
bei MV2007.Gui.Themen.Architektur.Bebauungsplan.ucBebauungsplanNavigator..ctor(op_Bebauungsplan pOption, ReportModel pModel, NN_NAVNODERow pNavigator)
bei MV2007.Gui.Themen.Architektur.Bebauungsplan.panBebauungsplanNavigator.CreatePlan()
bei MV2007.Gui.Themen.Architektur.Bebauungsplan.panBebauungsplan.initFirstActivate()
bei MV2007.Gui.Themen.Architektur.Bebauungsplan.panBebauungsplan.Aktivieren()
bei MV2007.Gui.Tools.FrameworkElemente.bpPanel.bpPanel_VisibleChanged(Object sender, EventArgs e)
bei System.Windows.Forms.Control.OnVisibleChanged(EventArgs e)
bei System.Windows.Forms.ScrollableControl.OnVisibleChanged(EventArgs e)
bei System.Windows.Forms.Control.SetVisibleCore(Boolean value)
bei System.Windows.Forms.Control.set_Visible(Boolean value)
bei MV2007.Gui.Element.bpView.mList_SelectedIndexChanged(Object sender, EventArgs e)
bei System.Windows.Forms.ListBox.OnSelectedIndexChanged(EventArgs e)
bei System.Windows.Forms.ListBox.WmReflectCommand(Message& m)
bei System.Windows.Forms.ListBox.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Folgendes ist bisher bekannt:

  • Ich habe ein kleines Test-Programm geschrieben welches einfach nur Visio einbettet. Dieses funktioniert.

  • Die Anbindung an das Visio funktioniert bei allen anderen Kunden

  • Wenn Visio gestartet wird -> dann über Visiodokument öffnen die Anwendung gestartet wird, dann läuft das eingebettete Visio ohne Probleme!?

  • Es geht um einen Windows Server 2003 SP 2 und Visio 2003 SP 3

  • Das Probramm verbindet sich auf einen Oracle Server mit der Treiberversion 11.2.0.1

Kann mir jemand weiterhelfen?

Gelöschter Account
vor 12 Jahren

Wenn ich dich richtig verstehe funktioniert alles gut solange Visio bereits läuft, richtig?
Für mich deutet das auf ein Rechte Problem im Zugriff auf die Registry hin.

COMInterop durchsucht erst die Registry nach der entsprechenden COM Klasse und kann diese nicht finden, das kann sich eigentlich nur um ein Berechtigungsproblem handeln.

Ich kenne das Microsoft Virtualisierung Softgrid leider nicht, evtl. läuft das in einer Sandbox und daher das Zugriffsproblem.

G
538 Beiträge seit 2008
vor 12 Jahren

Ich weiß nicht, ob das Interop dazu in der Lage ist, aber folgendes könnte funktionieren:

-- Versuch 1 --

  1. Visio starten mit dem Befehl wie es AppV (= Softgrid) starten würde
  2. Diese Instanz benutzen für die Interop.

-- Versuch 2 --
Sollte das nicht gehen, müsstest du dein eigenes Programm gemeinsam mit Visio sequenzieren. Dann laufen sie in der gleichen Sandbox und der Zugriff sollte möglich sein.

-- Versuch 3 --
Sequenziere ein kleines Dienstprogramm gemeinsam mit Visio, was deine Funktionalität kapselt und über HTTP oder MSMQ kommuniziert - aber Achtung "localhost" ist in der virtualisierten Applikation nicht unbedingt das gleiche wie auf deinem System.

//edit:
Beim weiteren Überlegen halte ich Versuch 2 für vielversprechend.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Andreas@Tricept,

Ich habe ein kleines Test-Programm geschrieben welches einfach nur Visio einbettet. Dieses funktioniert.

dann hast du ja schon die Basis für [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden. Da du vermutlich nicht selber testen kannst, sondern jeden Stand dem Kunden schicken musst, lege ich dir besonders die Variante mit der binären Suche ans Herz, um die Anzahl der Zyklen zu minimieren.

herbivore

A
Andreas@Tricept Themenstarter:in
289 Beiträge seit 2006
vor 12 Jahren

Ich habe die Lösung gefunden!

Nachdem eine DB-Verbindung zu einem Oracle Server v. 11.2.0.1 aufgebaut ist, ist Visio 2003 nicht lauffähig. Ich habe auf einen Virtuellen Rechner diesen Fall nachgestellt. Konnte Visio aus dem Programm nicht starten mit gegebener Meldung. Verbinde ich mich mit einem SQL Server, geht es ohne Probleme.

Eine Lösung ist das Instanziieren von Visio bevor die Oracle Verbindung aufgebaut wird. Dann funktioniert es auch nachfolgend. Sehr kurioser Fehler.
Hoffe ich kann damit auch anderen helfen die das Problem haben...

@Grumbler85 und @herbivore vielen dank für eure Hilfe.