2011-12-07 16 views
4

自己解凍型の7-Zipファイルを作成しました。 1つのCMDファイルが含まれており、7-Zipは抽出ファイルで実行されます。このcmdはレジストリを読み取り、いくつかのさらなる活動を行います(この特定の質問では重要ではありません)。Windows Server 2008 64ビット版の7-Zip実行権限

Windows Server 2003 32ビットでは、この動作はうまくいきます。ただし、Windows Server 2008のボックスでテストすると、7-Zipによって開始されたcmdにレジストリを読み取る権限がないことが示されます。具体的には、一部の領域(Windowsの現在のバージョン)を読み取ることができますが、他のソフトウェアキーは読み取ることができません。

私がcmdファイルを取得して実行すると(7-Zipが抽出する一時フォルダから実行すると)、すべて正常に動作します。

UACを使用すると、「管理者として実行する」と同じ問題が発生し、UACを無効にしても役立たないようです。

特権を昇格するように指示する設定ファイルには、7-Zipオプションは認識されません。私がここで紛失しているものはありますか? Windows Server 2008または64ビット版のOSでレジストリへのアクセスが制限されていますか?私のEXEファイルが、それが始動するコマンドに適切な権限を渡すことをどうすれば保証できますか?

+1

は、インストールのXMLファイル内の '<実行権限/>'要素を使用することがありますか? [http://izpack.org/documentation/installation-files.htm](http://izpack.org/documentation/installation-files.html) –

答えて

6

7-Zipファイルは32ビットの実行可能ファイルなので、コマンドスクリプトは32ビットのコンテキストで実行されています。結果の1つは、特定のレジストリの場所がリダイレクトされることです。詳細はMSDNを参照してください。

環境変数であるPROCESSOR_ARCHITEW6432を検索してWOW64環境を検出できます。cmd.exeのコピーをc:\windows\sysnativeで実行すると、ネイティブの64ビット環境に戻ることができます。コマンド・ファイルの先頭に

この2行トリックを行う必要があります。

if defined PROCESSOR_ARCHITEW6432 c:\windows\sysnative\cmd.exe /c %~pf0 %* 
if defined PROCESSOR_ARCHITEW6432 goto :eof 
+0

あなたは魔法使いです!私はこの答えに遭遇したことはありませんでした。ありがとうございました! –

+0

ちょっとハリー、私はwin2k3 64ビットで見つかったこのトリックは動作しません。はい、sysnativeがそこに存在しないことがわかりました。私はsystem32 \ cmd.exeにスワップする必要がありますが、スクリプトが再実行されるとPROCESSOR_ARCHITEW6432が検出されます。私がsystem32 \ cmd.exeを実行すると、私のものは動作しますが、ここでのスワップオーバーは失敗するようです。何が起きているのか? –

+0

いいえ、それは動作しません、それはまだ32ビットバージョンです。私が現時点で考えることのできる唯一の解決策は、コマンドファイルを再起動してパッケージに入れるための64ビットアプリケーションを作成することです。あなたがこれを新しい質問として投稿すると、誰かがもっと巧妙な答えを考えることができるかもしれません(「32ビットcmd.exeはWindows 2003 x64で64ビットcmd.exeをどのように起動できますか?」)。 –

関連する問題