2016-03-29 4 views
1

プログラムを動作させるために複数のdllファイルを登録しようとしています。私はプログラムファイルからsystem32へのファイルの登録またはコピーの問題

for %x in ("%programfiles(x86)%\folder\*.dll") do regsvr32 %x 

と一度にすべてのDLLファイルを登録するバッチファイルを作って、私は次のエラーを複数回取得

The module "C:\Program" failed to load... 
を はしかし、私は大きな問題に直面しています

また、上記のファイルをsystem32にコピーしてそこに登録しようとしましたが、同じエラーメッセージが表示されました。

最終的にはうまくいく方法がありますか?ありがとう!

答えて

2

万が一、%xで、バッチファイルの場合は%%xでしたか?

そして、一般的な安全性のヒント、そのように、^であなたのパスに括弧をエスケープ:

for %%x in ("%programfiles^(x86^)%\folder\*.dll") do regsvr32 "%%~x" 

編集:@のmofiのノートで%%xパラメータに引用符を追加しました。

+0

提案したように%% xを使ってみましたが、 "%% x was not expected"という警告が表示されます。それを取り出すことは何も起こらない。 –

+3

コマンドラインで直接実行する場合は、パーセント記号「%x」を1つ使用します。もしそれが.batファイルであれば、 '%% x'を使う必要があります。なぜなら、バッチファイルから何らかの理由で実行すると、式を最初に評価し、' %% 'を'% 'に変更するからです。 – LinuxDisciple

+0

'(x86)'で括弧をエスケープする必要はありません。二重引用符を避けるには、 '' %% x "'の代わりに '' %%〜x "'を記述する必要があります。おそらく '' %%〜fx ''はより良いかもしれないので、好きな場所からバッチファイルを実行することができます... – aschipfl

3

ファイルパスに空白が含まれているため、%xを二重引用符で囲む必要があります。

コマンドライン:

for %x in ("%ProgramFiles(x86)%\folder\*.dll") do %SystemRoot%\System32\regsvr32.exe "%x" 

バッチファイル:

for %%x in ("%ProgramFiles(x86)%\folder\*.dll") do %SystemRoot%\System32\regsvr32.exe "%%x" 

コマンドプロンプトウィンドウfor /?で実行し、すべてのヘルプページの出力をお読みください。

+0

私はあなたの提案を使用し、それは機能しました!しかし、私は今、プログラムをロードすることができますが、それを登録することができないとほとんどのエラーを取得します。それについて私は何ができますか? –

+0

私はアプリケーションコードと使用されたDLLの内部知識なしでこの新しい質問に答えることができません。一般に、アプリケーションのDLLを 'regsvr32'で手動で登録しなければならない場合は、良い兆候ではありません。これは、アプリケーションのインストーラーまたはアプリケーション自体で行う必要があります。 'HKLM \ Software \ Classes'にDLLを登録するには、書き込み権限が必要です。つまり、' Administrator'または 'TrustedInstaller'アカウントを使用する必要があります。バッチファイル*を管理者*として実行し、これが役立つかどうかを確認することができます。 – Mofi

+0

さて、それはこのように行く:このプログラムは、請求書の手続きを容易にするためにメキシコ政府によって作られた。私は、計量手続きとチケットを容易にするための会社向けのプログラムを作っています。このチケットは通常、政府のプログラムによって行われますが、自分のプログラムで自動的に運動をすることを任されています。私は多くの研究をしており、それを行うことができます。私はプログラマが提供するサンプルプログラムに取り組んでいますが、必要なdllがロードされていないために作業できません:/ –

関連する問題