2009-06-11 13 views
3

In diesen Tagen bin ich sehr beschäftigt mit der Entwicklung einer ActiveX/com-Anwendung. Einige unserer Kunden arbeiten unter stark eingeschränkten Windows-Umgebungen. Also entschied ich mich, meine Bewerbung regfree zu machen. Ich habe genman32.exe gefunden, das Manifeste leicht erstellen kann (auch mt.exe ist nützlich). Alles ging gut, aber wenn ich versuche, meine Anwendung von WSH (vbs oder js) auszuführen -die für meine Situation verpflichtet ist, weil die Anwendung auf einem com server- arbeitetMicrosoft.Windows.ActCtx unter Windows XP

set o = CreateObject("Application.Interface") 

// No object reference 

Denn „Create“ die registery sieht und es gibt keinen registery entry :) dann habe ich gesucht und gefunden, was "actctx" ist. Es ist sehr einfach in einer dot.net-Umgebung zu implementieren.), So habe ich beschlossen, dann ein wenig suchen

gefunden
set o = CreateObject("Microsoft.Windows.ActCtx") 
o.manifest = "L:\\Application.dll.manifest" 
set app = o.CreateObject("Application.Interface") 
app.Launch() // which is my executing function 

Problem - „Microsoft.Windows.ActCtx“ Schnittstelle in Windows XP-Maschinen nicht zur Verfügung steht, auch, aber ich muß meine Anwendung von WSH (vbs oder js) ausführen in SP3 - Microsoft lässt es nie einfach - Gibt es eine Lösung für dieses Problem? Kennen Sie andere Methoden oder Windows-Updates, die diese Schnittstelle erstellen?

Antwort

1

Wenn die Microsoft.Windows.ActCtx verteilbar, dann gäbe es hat eine Möglichkeit sein, damit es auf die Maschine zu bekommen und weltweit registriert. Wenn Sie Zugriff auf diese Maschine haben, können Sie einfach Application.Interface registrieren? Wenn Sie mit einer eingeschränkten Umgebung zu tun haben, müssen Sie sich damit befassen, was bereits verfügbar ist.

Es sieht so aus, als ob Sie das wsh-Skript verwenden, um Ihre Anwendung zu starten. Warum nicht einen Stub schreiben, um die App in nativem oder verwaltetem Code zu starten (wo Sie ein Manifest verwenden können) und stattdessen diesen Stub aufrufen?

3

Ich habe das Problem mit meinem Manifest herausgefunden. Ich werde es mit niemandem teilen anderen, die in ein ähnliches Problem laufen haben.

Bitte beachten Sie, dass Sie die progid = "" Eigenschaft in Ihrem Manifest angeben müssen, wenn Sie dies mit der "Microsoft.Windows.ActCtx" -Schnittstelle verwenden, andernfalls erhalten Sie ActiveX-Komponente kann Objektfehler nicht erstellen.

<comClass 
clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}" 
progid="myclass.process" 
threadingModel = "Apartment" /> 

Das folgende Manifest Beispiel sollten Sie aufstehen und laufen :)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
    manifestVersion="1.0"> 

<assemblyIdentity 
    type="win32" 
    name="myclass" 
    version="1.0.0.0"/> 

<file name = "myclass.dll"> 

<comClass 
    clsid="{ED59F192-EF2E-4BCC-95EB-85A8C5C65326}" 
    progid="myclass.process" 
    threadingModel = "Apartment" /> 

<typelib tlbid="{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}" 
     version="1.0" helpdir=""/> 

</file> 

<comInterfaceExternalProxyStub 
    name="_PROCESS" 
    iid="{187D0811-470D-44C0-B68C-C1C7F3EEFDA0}" 
    proxyStubClsid32="{00020424-0000-0000-C000-000000000046}" 
    baseInterface="{00000000-0000-0000-C000-000000000046}" 
    tlbid = "{7AE20C3A-48C2-42C1-A68D-A1C3EB0A2C65}" /> 

</assembly>