問題タブ [syswow64]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows-vista - Windows Vista 64 ビットが既定で 32 ビットの cmd.exe を使用するのはなぜですか? (マシン固有)
状況:
現在の開発環境を Windows XP 32 ビットから Windows Vista 64 ビット (*) に変換する必要があります。当然のことながら、私たちのビルド システムでは、ハードコーディングされたパスに問題がある箇所がたくさんありました (例: " C:\Program Files
" が " " になるC:\Program Files (x86)
)。幸いなこと%ProgramFiles%
に、ソース プロセス (32 ビットまたは 64 ビット) に基づいて適切なディレクトリにマップされる環境変数があります。そこで、ビルド スクリプトを で更新しました%ProgramFiles%
が、これで終わりだと確信していました。
ビルド環境は、コマンドライン ( C:\Windows\System32\cmd.exe
) から呼び出されます。
問題:
1 つの特定のマシン (つまり、作業中の開発マシン) で、実際には 32 ビット プロセスであることが判明したC:\Windows\System32\cmd.exe
ため、スクリプトはディレクトリのx86
バージョンを検出し、すべてがうまく機能します。Program Files
私が見つけることができる他のすべての 64 ビット マシン (自宅のマシンを含む) では、C:\Windows\System32\cmd.exe
が 64 ビット バージョンで、32 ビット バージョンがC:\Windows\SysWow64\cmd.exe
. そのため、ビルド スクリプトは探しているものを見つけることができず、失敗します。
32bitcmd.exe
が必要な場合は明示的に呼び出す必要があり、デフォルトでは 64bit を取得する必要があることを理解しましたcmd.exe
。~の典型的なWORKSFORME
ケース
問題は、これが正しくないマシンに何が起こったのかということです。cmd.exe
あるマシンではデフォルトで32 ビットになっているのに、他のマシンではそうではないのはなぜですか? C:\Windows\System32\cmd.exe
いずれの場合も、メニューから明示的に実行していますが、1 台のマシンでのみStart|Run
異なる結果が得られます。すべてが同じエディションの Vista 64 ビットを実行しています。
考えや洞察はありますか?
(*) 私がこれをしなければならないことを受け入れてください。なぜ私がこれを行っているのかを言う自由はありません。OS とすべてを最初から再インストールすればおそらくうまくいくでしょうが、それは確かにやり過ぎです。さらに、Vista マシンを配布するよう IT 部門を説得するのは非常に困難でした。
dll - 64 ビット Windows で 64 ビット DLL が System32 に移動し、32 ビット DLL が SysWoW64 に移動するのはなぜですか?
いつファイルを配置する必要があるか知りたい
64 ビット Windows システムでは、C:\Windows\System32 または C:\Windows\SysWOW64。
32 ビット用と 64 ビット用の 2 つの DLL がありました。
論理的には、32 ビット DLL を C:\Windows\System32 に配置し、64 ビット DLL を C:\Windows\SysWOW64 に配置すると考えました。
驚いたことに、それは逆です!32ビット DLLはC:\Windows\SysWOW 64に入り、64ビット DLL は C:\Windows\System 32に入ります。
非常に紛らわしいもの。この背後にある理由は何ですか?
windows - MSI インストーラー、64 ビット OS、\windows\system32\inetsrv フォルダーへの書き込み
Windows Server 2008 64 ビットでは、いくつかのファイルを \windows\system32\inetsrv フォルダーに書き込むために .msi インストーラー ファイルが必要です。(ファイルはいくつかの XML スキーマ検証ファイルであり、C# XmlReaderSettings.Schema.Add() はそのフォルダーにあると想定しています)。
インストーラーが実行されると、ファイルは必要な場所ではなく、\windows\SysWOW64\inetsrv フォルダーに配置されます。
インストーラーに \windows\Sysnative フォルダーへの書き込みを試みたところ、インストーラーはその正確な名前のフォルダーを作成しましたが、これが可能になるとは思っていませんでした。SysWOW64 リダイレクトの抑制に関する適切な議論については、このページを参照してください。
Windows 2008 64 ビットの \windows\system32\inetsrv フォルダーにファイルを書き込む .msi を取得するにはどうすればよいですか?
com - SysWOW64\cscriptまたはwscriptの32ビットCOMコンポーネントで「壊滅的な障害」を解決する方法
コマンドラインの32ビットスクリプトホストであるSysWOW64\cscript.exeを使用して、Windows Server2008R2で7年前のサードパーティの32ビットCOMコンポーネントを使用するVBScriptスクリプトを実行しようとしています。クラスでCreateObjectを呼び出すと、成功しているように見えますが、オブジェクトでプロパティまたはメソッドを初めて使用しようとすると(いくつかの異なるものを試しました)、「壊滅的な失敗」が発生します。SysWOW64 \ wscript.exeでも同じ結果が得られますが、もちろん、エラーメッセージがコマンドラインウィンドウではなくmsgboxに表示される点が異なります。
これは、次の理由から、特に64ビットスクリプトホストに関係していると思います。
- 同じコンポーネントを呼び出し、同じコードの95%を使用する、同等のクラシックASPスクリプトは、32ビットCOMをサポートするように構成されたIISを使用して、同じサーバーで正しく機能します。
- 同じVBScriptは、32ビットのWindowsXPマシンと32ビットのWindowsServer2003マシンで正しく機能します。
- コンポーネントは、64ビットのWindows7マシンでもまったく同じように失敗します。
この問題の解決策をGoogleで検索したところ、ほとんどの場合、COMコンポーネントをVisualStudioのツールバーに配置することで解決されたさまざまな問題が見つかりました。明らかに、その解決策はここでは適用されません。
私の質問は次のとおりです。
- COMコンポーネントを呼び出すWindowsスクリプトホストからの「壊滅的な障害」の背後に常にあるコアの問題はありますか?
- 構成スナップインまたはレジストリに、「32ビットアプリケーションを有効にする」ためにIISアプリケーションプールに加えた変更と同様の変更を行う必要がある場所はありますか?
- このコンポーネントに固有であることが判明した場合に備えて、障害の詳細がないかどうかを確認するために、Server 2008 R2イベントビューアに確認する必要のある一般的な場所はありますか?
前もって感謝します。
vb.net - Windows 7 の System32 フォルダー
XP 32 ビット OS でこのコードを使用して、%windir%\windows\system32
フォルダー パスを取得しています。
私が知りたいのは%windir%\windows\syswow64
、Windows 7 (64/32 ビット) で使用すると、この同じコードがフォルダーを返すということです。
winapi - 64 ビット プロセスがファイル システムとレジストリの 32 ビット ビューを持つにはどうすればよいですか?
下位互換性のために、私の 64 プロセスは、ファイル システムとレジストリの 32 ビット ビューを参照する必要があります。
32 ビット プロセスにファイル システムとレジストリの 64 ビット ビューを表示させる方法を知っています (Wow64DisableWow64FsRedirection と Wow64RevertWow64FsRedirection を使用)。
しかし、64 ビット プロセスでファイル システムとレジストリを 32 ビット ビューにするにはどうすればよいでしょうか。
64-bit - CreateProcess (C++) から 64 ビット版の javaw.exe を起動する方法
Windows で Java ベースの GUI アプリケーションを起動するランチャーを C++ で作成しています。CreateProcess
「javaw.exe」の起動に使用しています。「javaw.exe」の 32 ビット バージョンが常に起動されるという事実を除いて、すべてが機能します。
Java がインストールされると、実行可能ファイル「java.exe」および「javaw.exe」が%windir%\System32
32 ビット Windows に配置されます。64 ビット Windows では、同じ実行可能ファイルを%windir%\SysWow64
.
3 つの可能性があります。
32 ビット Windows で実行される 32 ビット ランチャー:
%windir%\System32
は検索パスにあり、32 ビットの javaw.exe が見つかります。GUI が起動します。すべてが機能します。64 ビット ウィンドウで実行される 32 ビット ランチャー:
%windir%\System32
検索パスにあります。%windir%\System32
にリダイレクトされ%windir%\SysWow64
ます (この場合、私のランチャーは 32 ビットであるため)。32 ビットの javaw.exe が見つかりました。GUI が起動します。すべてが機能します。64 ビット Windows で実行される 64 ビット ランチャー:
%windir%\System32
検索パスにあります。リダイレクトは発生しません。実行可能 javaw.exe は含まれていません。ランチャーが失敗します。
3 番目のケースで 64 ビットの javaw.exe を起動するにはどうすればよいですか?
wcf - COM .dll を IIS7.5 に登録する (REGDB_E_CLASSNOTREG)
この問題は私を夢中にさせています。COM .dll (SysWOW64 にあります) を使用していくつかの操作を行う WCF サービスがあります。Windows 2008 R2 に登録しましたが、サービスがサーバーにデプロイされていると機能しません。私のサービスは「任意の cpu」用にコンパイルされています。
コンソール アプリケーションを作成すると、正常に動作します。私は何を間違っていますか?許可の問題ですか?app-pool ユーザーを管理者に変更しましたが、どちらも機能しません。プールを 32 ビット アプリケーションに変更しようとすると、プールがクラッシュするか、サービスがタイムアウトします。
エラーメッセージは次のとおりです。
System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {47E736CA-3EEA-11D5-8400-00A0C9CA15AD} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
誰かが私を正しい方向に向けることができますか?
windows - system32にコピーすると、代わりにsysWOW64に自動的にコピーされるのはなぜですか?
CopyFileAを呼び出してファイルをC:\ windows \ system32にコピーしようとしています-デバッグでは、文字列「C:\ windows \ system32 \ filename」が実際にCopyFileAに送信されますが、ファイルは「C:\」にコピーされます。代わりにwindows\system32 \ sysWOW64\filename"。なぜそれが起こるのか誰かが知っていますか?