2009-06-11 34 views
3

最近、私はactivex/comアプリケーションの開発に非常に忙しいです。一部のお客様は、制限の厳しいWindows環境下で作業しています。だから私は私のアプリケーションをregfreeにすることにしました。私は簡単にマニフェストを作成できるgenman32.exeを見つけました(mt.exeも便利です)。すべてが正常に行ってきましたが、私は、アプリケーションがCOMサーバ -Microsoft.Windows.ActCtx on Windows Xp

set o = CreateObject("Application.Interface") 

// No object reference 

上で動作しますので、「CreateObjectのは」registeryに見えるので、私のような状況のために義務付けられている-which WSH(VBSやJS)から自分のアプリケーションを実行しようとしたとき、登録エントリはありません:)その後、 "actctx"というものを検索して見つけました。 dot.net環境で実装するのはとても簡単です。 「Microsoft.Windows.ActCtx」インターフェースのWindows XPマシンでは利用できさえない - そして

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 

問題が見つかりました。)ので、私は少しを検索することにしました。しかし、私はWSH(VBSやJS)から自分のアプリケーションを実行する必要がありますSP3の - マイクロソフトではそれを簡単にすることはありません - その問題の解決策はありますか?そのインターフェイスを作成する他の方法やウィンドウの更新を知っていますか?

答えて

1

Microsoft.Windows.ActCtxが再配布可能であれば、それがマシンに到達し、グローバルに登録される方法が必要です。これをマシンに登録するアクセス権があれば、Application.Interfaceを登録するだけでいいのですか?制限された環境に対処しているのであれば、すでに利用できるものに対処する必要があります。

アプリケーションを起動するためにwshスクリプトを使用しているようです。なぜ、マニフェストを使用できるようになるネイティブコードやマネージコードでアプリケーションを起動するスタブを書いて、代わりにそのスタブを呼び出すのですか?

3

私はマニフェストの問題を理解しました。似たような問題に遭遇した可能性のある他の人と共有します。

"Microsoft.Windows.ActCtx"インターフェイスでこれを使用する場合は、マニフェストでprogid = ""プロパティを指定する必要があります。そうしないと、ActiveXコンポーネントでオブジェクトを作成できないというエラーが発生します。

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

次のマニフェストの例では、あなたを取得し、実行している必要があります:)

<?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>