パッケージの展開が失敗した時に確認したいポイント ~ sysnative 編 ~

Last Update:

みなさま、こんにちは。Configuration Manager サポート チームです。

今回は Configuration Manager からのパッケージ展開が失敗した際ご確認いただきたい sysnative について解説させていただきます。


パッケージ展開対象のアプリケーションが 64 bit の場合には sysnative の指定が必要になることがあります

現在展開対象としているアプリケーション、クライアント端末は 64 bit ではありませんか ?
その場合、パッケージの展開が失敗してしまう可能性があります。

ファイル リダイレクトについて

ファイルリ ダイレクトという機能をご存知でしょうか ? これは 64 bit 端末上で 32 bit のアプリケーションを実行するために使用されております。通常 64 bit のアプリケーションの dll は %windir%\System32\ から呼び出されます。しかし、64 bit の端末上の 32 bit アプリケーションの dll は、異なるディレクトリに格納されており、各 bit によって、パスを使い分ける必要があります。

その際を埋めるのが WOW64 です。
WOW64 は上記のディレクトリ パスの差異をファイル リダイレクトによりあたかも同じ場所にあるように扱うことを可能にしています。

32 bit アプリケーションから %windir%\System32 が指定された場合には、WOW64 は %windir%\SysWOW64(32 bit プログラム用のファイルがおいてあるフォルダー) にリダイレクトします。

ファイルリダイレクトによる弊害

しかし、パッケージ展開の際には注意が必要となります。
パッケージ展開処理は 32 bit で動作します。そのため、64 bit の OS の端末上でパッケージ展開を実行する際には WOW64 を介して 32 bit 用の dll が存在するパスにリダイレクトされます。

例えば、64 bit の exe を実行する場合に、パッケージのコマンド ラインに「cmd /c test.exe」と指定した場合には、C:\Windows\SysWOW64 配下の cmd が呼び出され、32 bit の cmd から 64 bit のアプリケーション(exe)を実行する事となり、正常に動作しないことがあります。

パッケージのコマンドラインの確認方法

1.MECM 管理コンソール > [ソフトウェア ライブラリ] > [概要] > [アプリケーション管理] > [パッケージ] にて、[プログラム] タブを開き、該当のプログラムを右クリック > [プロパティ] を開きます。

2.[全般] タブにて「コマンド ライン」を確認することができます。

回避策

以下のように sysnative をコマンドラインに指定することにより、回避することが可能となります。

1
%windir%\sysnative\cmd /c test.exe

※ 適宜ファイル名を変更してお試し下さい。

ps1 の場合

1
"%Windir%\sysnative\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -Command .\xxx.ps1

bat の場合

1
%windir%\sysnative\cmd.exe /c xxx.bat

vbs の場合

1
%windir%\sysnative\cscript.exe xxx.vbs

msi の場合

1
%windir%\sysnative\msiexec.exe xxx.msi

パッケージのコマンドラインの変更箇所

1.MECM 管理コンソール > [ソフトウェア ライブラリ] > [概要] > [アプリケーション管理] > [パッケージ] にて、[プログラム] タブを開き、該当のプログラムを右クリック > [プロパティ] を開きます。

2.[全般] タブにて「コマンド ライン」の修正を行います。

3.[OK] ボタンをクリックし、変更を完了します。

4.パッケージの再展開を行い、改善が見られるかご確認くださいませ。