2017-10-04 3 views
0

質問:は、現代のC#コードでVBScriptをホストされている実行

のC#のためにどのような無料または商用のスクリプティングホスト64ビットアーキテクチャをターゲットとC#のアプリでVBScriptを実行できますか?

背景:

それはQ3 2017年である - このテーマは、いくつかの結論と、もはやそれらの古いコードサンプルの多くの作品の前にはなくて何度も提起されています。

私は従来のvb6 COM dllをc#サービス(Dot Netフレームワーク4.6.1+)に移行しています。 vb6 dllの機能は、MS Scriptingコントロール(msscript.ocx)を使用した拡張性でした。これにより、ユーザーは厳密な制約内でアプリケーションの動作を変更するために小さなVBスクリプトを書くことができました。それはうまくいったので、それを正当化することはできません。

新しいc#サービスは64ビットアプリケーションでなければなりません。 msscript.ocxは32ビットAFAIKです。理想的には、私たちはmsscript.ocxの使用を可能な限り小さなものに置き換えます。

注:

  1. PowerShellは、おそらくそれは、ユーザーが機能のPandorasのボックスへのアクセスを与えるだろうと良い置換候補ではありません。
  2. 私はcodefluentクライアントへの参照を潜在的な直接的な置き換えとして見てきましたが、サンプルコードを見つけることはできません。この製品はvbscriptに対応していますか?
  3. 一部のシェルアプローチを使用してvbscriptをファイルとして実行することは、スクリプトが変数を要求するためにC#ホストにコールバックできる必要があるため、実行可能とはみなされません。
  4. ActiveXScriptLibは可能性があります。 VisualStudio経由でインストールするNuGetパッケージがあり、hereの例がx64で動作します。これには、スクリプトアクセスにホスティングC#のメソッドが指定されているという複雑な例も含まれます。

研究ノート:MSは、最初の64ビットOSを導入するため

これは、よく踏まパスされていないサンプルコードがはるかには、もはや現在のC#で実行されます。

サンプルコード

一時修正として、誰もがその缶C#64ビットアプリケーションで使用されるサンプル・コードを提供することができますmsscript.ocxを使用しますか?このサンプルでは、​​msscript.ocxがアクセスした場合、作業は「う」 - 私はエラーを取得する:

System.Runtime.InteropServices.COMException: 'Retrieving the COM class factory for component with CLSID {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).'

public void TestScript() 
{ 
    Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC")); 
    dynamic obj = Activator.CreateInstance(scriptType, false); 
    obj.Language = "vbscript"; 
    string vbscript = "2 * 2"; 
    var res = obj.Eval(vbscript); 
    System.Diagnostics.Trace.WriteLine(res); 
} 

編集:アイテム4はノートにリストに追加を参照してください - いくつかの可能性を示しました。

+1

Microsoftの[ClearScript](https://github.com/Microsoft/ClearScript)は、あなたが探しているものです。 –

+0

ありがとう@ Kul-Tigin - リンクを見て、最近のコミットがアクティブなプロジェクトであることが分かりました。 VBScriptもサポートしています。 –

答えて

1

あなたの質問にCodeFluentエンティティが記載されているので、はい、VBScriptをサポートしています。非常に高度なシナリオcodefluent-vs-interop-msscriptcontrol-dllまたはこのblog entryのかなり簡単なサンプルについては、stackoverflowからこの前のエントリを見ることができます。また、このCodefluentランタイムクライアントをどこから取得するかについても言及しています。

+0

MCRに感謝します。私たちはプロジェクトのこの部分に近づいており、私は報告します。 –

関連する問題