none
Visual Studio Installer TargetPlatform(x86)の際、64bitOSのSystem32配下にファイルを配置したい RRS feed

  • 質問

  • Visual Studio 2015 Installerを用いて、インストーラを作成しています。

    ■実現したいこと
    インストーラのTargetPlatform=x86に設定したインストーラで

    OSが32bit、64bitどちらの場合でもWindows\System32配下にファイルを配布したいと考えています。

    ※TargetPlatformをx64に設定しての対応は考えていません。

    ■現状

    32bitにインストールした場合は、System32配下にファイルが配布されます。

    64bitにインストールした場合は、SysWOW64配下にファイルが配布されます。

    ■検証

    インストーラのFile System on Target Machineで

    ・System Folder で配布しようとすると32bitはSystem32、64bitはSysWOW64に配布されます。

    ・System (64-bit) Folder だとコンパイル時にTargetPlatformがx86のためエラーとなります。

    ・Custom Folder でパスに「C:\Windows\System32」で配布しようとすると32bitはSystem32、64bitはSysWOW64に配布されます。

    何か良い方法があればご教授ください。

    よろしくお願いします。


    2019年11月26日 10:01

すべての返信

  • 「File System Redirector」
    https://docs.microsoft.com/ja-jp/windows/win32/winprog64/file-system-redirector

    64bit OS において、32bit アプリから見た %windir%\system32 フォルダは SysWOW64 フォルダになります。

    なので

    ・System Folder で配布しようとすると32bitはSystem32、64bitはSysWOW64に配布されます。

    が正解ではないでしょうか。

    どうしてもということであれば、OS を判定して %windir%\Sysnative を使うことになると思います。



    • 編集済み KOZ6.0 2019年11月26日 11:35
    2019年11月26日 11:33
  • 64bit OS の system32 は 64bit DLL を置く場所ですが、コピーしたいとされているものは 64bit DLL ですか?
    また、近年は system32 に DLL を置くことは避ける風潮にあります。
    どうしてもシステム全体で共有しなければならず、かつベンダー非依存ならわからないでもないですが…。

    2019年11月26日 12:25
    モデレータ
  • yusuke_jpさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    Wow64DisableWow64FsRedirection関数を使用して、ファイルシステムのリダイレクトを無効にすることができます。
    https://docs.microsoft.com/en-us/windows/win32/api/wow64apiset/nf-wow64apiset-wow64disablewow64fsredirection

    ただし、Wow64DisableWow64FsRedirection関数は、現在のスレッドによって実行されるすべてのファイル操作に影響することに注意してください。
    ファイルシステムのリダイレクトが任意の期間に無効になっていると、意図しない結果が生じる可能性があります。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年11月29日 8:17
    モデレータ
  • Windows Installer なので、System64Folder プロパティを指定します。

    32bitOSの場合未定義になるので、対象コンポーネントの Condition に System64Folder と入れて、インストールされないように工夫するなどの対応が必要です。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2019年12月17日 4:19