none
Windows7 64bitのWSHにおけるCopyFileコマンドについて RRS feed

  • 質問

  • Windows7にて、スタートアップ時に、クライアントに対し最新バージョンのプログラム、設定ファイル等をコピーするスクリプトファイル(wsf)を作成しています。

    CopyFileを使用してコピーを行っていますが、64bitに限り、コピー先がWindows直下である場合にコピーが出来ない現象に困っています。また、Processor_Architectureを使用して32、64bitを判別しています。どなたかこのような現象に対する対策をご存知の方は教えてください。よろしくお願いいたします。

    2014年10月20日 7:21

回答

  • リダイレクトは System32 と SysWOW64 間なので、Windows ディレクトリ自体には影響しないはずです。

    32bit/64bit で振る舞いの違いは想像できるものがないのですが、UAC の ON/OFF が違うとか、別要因の可能性は否定されていると思っていてよいのでしょうか。

    • 編集済み AzuleanMVP 2014年10月20日 14:08
    • 回答としてマーク eureka0828yt 2014年10月21日 0:35
    2014年10月20日 14:07

すべての返信

  • 64bit Windows上での32bitアプリケーションの場合、File System Redirectorの機能によりWindows直下へのファイルアクセスはWindows\SysWOW64直下へとリダイレクトされます。(ファイルがあろうがなかろうが。)
    2014年10月20日 9:29
  • 返信ありがとうございます。bit判定は、以下のページ、魔界の仮面弁士さんのソースを参考にしています。

    https://social.msdn.microsoft.com/Forums/pt-BR/42b39f75-79ea-483d-a86d-fbbe3e73690d/windows8-64bit-vbscreateobject80040154cscriptok?forum=vbgeneralja

    実行すると、SysWoW64\Wscript.exeから1度再起動し(再起動前:req = "x86" And proc = "x64")→(再起動後:req = "x86" And proc = "WOW64")、コピー処理に移っています。

    Windows直下がコピー先の場合、何か別の処理が必要なのかがよくわかりません。

    2014年10月20日 12:10
  • リダイレクトは System32 と SysWOW64 間なので、Windows ディレクトリ自体には影響しないはずです。

    32bit/64bit で振る舞いの違いは想像できるものがないのですが、UAC の ON/OFF が違うとか、別要因の可能性は否定されていると思っていてよいのでしょうか。

    • 編集済み AzuleanMVP 2014年10月20日 14:08
    • 回答としてマーク eureka0828yt 2014年10月21日 0:35
    2014年10月20日 14:07
  • 私の提案が的外れの可能性はありますが、少なくともリンク先には

    Access to %windir%\regedit.exe is redirected to %windir%\SysWOW64\regedit.exe.

    と例示されています。

    2014年10月20日 14:09
  • 確かにその部分は読み落としていたようで、失礼しました。
    ただ、%windir% 全体ではないはずです。これはリダイレクト先が %windir%\SysWOW64 であることから察せられるように、「いくつかの例外」と考えた方が良いでしょう。
    (そうしないと、System32 の要素と %windir% の要素すべてが SysWOW64 に混ざってしまうことになるため)

    手元の Windows 8.1 Update で C:\Windows と C:\Windows\SysWOW64 にそれぞれ abc.txt を配置して、x86/x64 のテストコードで C:\Windows\abc.txt を読み込んだところ、両方ともに C:\Windows\abc.txt に配置した内容を得られました。
    また、同様に C:\Windows\System32 と C:\Windows\SysWOW64 に配置して C:\Windows\System32\abc.txt を読み込んだ場合は x86/x64 で違う内容が得られました。
    以上の結果から、少なくとも Windows 8.1 Update においては %windir% に対するリダイレクトは限定的であると考えています。

    2014年10月20日 14:32
  • 結果的に、正にご指摘の通り32bitと64bit間でUACの設定に違いがありました。64bit側のユーザーアカウント制御の設定を「通知しない」とすることでコピーが成功しました。

    皆様、ご回答ありがとうございました。

    2014年10月21日 0:35