3

最近は、activex/com アプリケーションの開発で大忙しです。一部のお客様は、非常に制限された Windows 環境で作業しています。そこで、アプリケーションを regfree にすることにしました。マニフェストを簡単に作成できる genman32.exe を見つけました (mt.exe も便利です)。すべてがうまくいきましたが、wsh(vbs または js) からアプリケーションを実行しようとしたとき - アプリケーションは com サーバー上で動作するため、私の状況では義務付けられています -

set o = CreateObject("Application.Interface") 

// No object reference 

「CreateObject」はレジストリを参照し、レジストリエントリがないため:)次に、「actctx」を検索して見つけました。dot.net 環境での実装は非常に簡単です。しかし、wsh(vbs または js) からアプリケーションを実行する必要があるので、少し検索して見つけました。

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

問題 - 「Microsoft.Windows.ActCtx」インターフェイスは、SP3 でも Windows XP マシンで使用できません - Microsoft はそれを決して簡単にさせません - その問題の解決策はありますか? そのインターフェイスを作成する他の方法またはウィンドウの更新を知っていますか?

4

2 に答える 2

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>
于 2010-10-04T17:00:51.607 に答える
1

Microsoft.Windows.ActCtx が再配布可能である場合、マシンに取得してグローバルに登録するための何らかの方法が必要になります。これをマシンに登録するアクセス権があれば、単純に Application.Interface を登録できませんか? 制限された環境を扱っている場合は、すでに利用可能なものに対処する必要があります。

wsh スクリプトを使用してアプリケーションを起動しているようです。ネイティブ コードまたはマネージ コード (マニフェストを使用できる場所) でアプリを起動するスタブを作成し、代わりにそのスタブを呼び出してみませんか?

于 2009-06-16T16:30:05.673 に答える