2016-11-21 12 views
2

Parallel ToolboxでMATLAB R2016bのスタンドアロンライセンスを取得しています。私はそのツールボックスがインストールされていないかもしれない顧客に送信されるアプリケーションを書いています。私は正常に失敗する(つまりシングルスレッドを実行する)ようにアプリケーションを作成したいと思います。問題は、ツールボックスがインストールされているので、パラレルツールボックス機能を使用しようとするとエラーが発生しないため、エラーポイントをテストできないということです。MATLABツールボックスを一時的に無効にする方法

状況を一般化するために、ツールボックスの依存関係が満たされていないときにアプリケーションの動作をテストしたいので、ユーザーにアプリケーションを使用できないという意味のメッセージを提供するか、それ以外の場合は回避策を提供します。

ツールボックスをアンインストールしてから再インストールするか、2番目のライセンスを購入して2番目のコンピュータ(または別のユーザ名を持つ同じコンピュータ)にインストールするなど、一時的にMATLABがそうではないと思う方法はありますか?利用可能ですか?


コメントから質問には、私の質問に対する答えは「いいえ」と表示されます。単にパスを削除しても、ツールボックスは無効になりません。まず第一に、ツールボックスは単一のディレクトリにはありません。それはいくつかあります(私はrmpath Parallel Toolbox用に11個のディレクトリを用意していました。

これが完了すると、verと入力すると、Parallel Toolboxがインストールされていることが表示されます。また、異なるエラーがスローされるため、このメソッドを使用してプログラムの動作を適切にテストすることはできません。例えば、私はディレクトリを削除した後、私は次のような動作を得る:

>> n = gpuDeviceCount 
Undefined function or variable 'gpuDeviceCount'. 

を私は同じコマンドを入力するために、パラレルツールボックスがインストールされていない友人を尋ねられたとき、彼は次のように得ました:

>> gpuDeviceCount 
gpuDeviceCount is not included in your installed products. These products offer 'gpuDeviceCount': 
    Parallel Computing Toolbox 

異なるエラー、異なる例外がスローされます。 2番目は期待されています。もし私が簡単に意図的にそのエラーを投げれば、try/catchブロックでどのような例外をテストして適切に動作するかを知ることができます。 1つ目は予期せぬことであり、パートの壊れたインストールや愚かなタイプミス(たとえば、パスを追加した後、n = gpuDeviceCounts;が最初のエラーをスローするなど)など、さまざまな理由で発生する可能性があります。


私はMathWorksにチケットを提出し、別の回避策がない限り返信します。

+0

あなたのパスのツールボックス(通常は '/ PATH/TO/MATLAB/toolbox'の下)にあるフォルダを削除してください – Lee

+0

そして、ツールボックスを元に戻したいときはどうすればいいですか? – craigim

+0

同じセッションのパスに戻すか、再起動する場合は何もしないでください。 – Lee

答えて

1

完了。

これをFEXに掲載し、承認後、ここにリンクを貼ります。

私はこれをテストしましたはR2010aで、すべてのユニットテストに合格しています。しかし、MATLABは、と非常にのバージョン間で異なることがあるので、問題が見つかった場合は奇妙なエラーなどが発生する場合は教えてください。修理を行うことができます。

EDIT彼らは私の提出を承認しました。これはhereです。この投稿からコードを削除します。

+0

R2016bでは非常にうまく動作します。奇妙な唯一の動作は、 'findUnlicensedFunctions.m'という文書化されていない関数があり、MATLABが呼び出す関数が特定のツールボックスにあるかどうかを確認するためです。そうであれば、コンソールメッセージを上記の質問に入れた2番目のエラーメッセージに変更し、見つからないツールボックスを指示します。しかしながら、基本的な 'MException'オブジェクトは同じように見えます。 – craigim

+0

@craigim hmmm ...それはうまくいくのですか?あなたはあなたの友人が投げられたのと同じMEを手に入れましたよね? –

+0

はい。 「ME」は同じです。コンソールメッセージには違いがありますが、 'ME.message'には違いはありません。この相違点は、このfindUnlicensedFunctions関数によって処理されます(私は信じています)。これは、メッセージをインターセプトし、データベース内の関数を検索し、不足しているツールボックスの名前を返します。 'try/catch'ブロックを使用してテストする目的で、これは私が探していたものです。 – craigim

関連する問題