Steamworks ドキュメンテーション
インストールスクリプトの作成と使用

概要

Steamは様々な共通再頒布可能ファイルを自動的にインストールしますが、アプリケーションに初回実行要件がある場合があります。
注意:以下で説明するインストールスクリプト機能は、主にWindowsオペレーティングシステム用です。 macOSのサポートは、ファイルのアクセス許可とシンボリックリンクに限られます。 現時点では、Linux/SteamOSのインストールスクリプト機能はありません。

インストールスクリプトファイルは、インストール時に特定のアクションを実行できるようにする設定ファイルです。

フルゲーム/アプリケーション、またはDLCパッケージがそれぞれインストールスクリプトを持つ場合があります。 インストールスクリプトをビルドに統合する場合、インストールスクリプトの数に制限はありません。 SteamPlayアプリについては、インストールスクリプトは常にOS固有のデポに格納することが推奨されます。

スクリプトの基本的な例:
"InstallScript" { "Registry" { "HKEY_LOCAL_MACHINE\\SOFTWARE\\Foo\\Bar" { "string" { "Install_Path" "%INSTALLDIR%" "Exe_Path" "%INSTALLDIR%\\foobar.exe" } "dword" { "PatchVersion" "12" } } } "Run Process" { "DirectX" { "HasRunKey" "HKEY_LOCAL_MACHINE\\Software\\Valve\\Steam\\Apps\\480" "Process 1" "%INSTALLDIR%\\DirectX\\DXSETUP.exe" "Command 1" "/silent" "NoCleanUp" "1" } } }

ルートの後ろの2つ目のキー名は、実行する処理を記述します。

注意: すべてのキー名と値にはエスケープシーケンスが使用可能です。「\」を使用する場合は「\\」と記述します。

ビルドへのインストールスクリプトの統合

まず、インストールスクリプトファイルは、ビルドと共にインストールされるデポの一部である必要があります。 そのファイルは、必ずアプリまたはデポの定義されたContentRoot内に配置してください。

次に、「InstallScript」ディレクティブを使用してデポビルドスクリプト内でインストールスクリプトを指定します。 Steamへのアップロード-高度なビルドスクリプトのページで例を確認できます。

ビルドプロセス中に次の2つが行われます。
  • インストールスクリプトがSteamにアップロードされ、暗号化され署名されます。 この署名は、Steamにより、すべてのインストールスクリプトの実行前に認証されます。これはWindows上のHKLMハイブへの書き込みなど、特定の操作の実行に必要になります。 これにより、インストールスクリプトのローカルコピーに変更が加えられる場合があります。
  • インストールスクリプトはデポマニフェスト内でマークされます。 これは生成されたmanifest.txtファイルのFlagsフィールドの100として確認することができます。
Steamユーザーがゲームを始めると、Steamはゲーム用にマウントされた全デポで、インストールスクリプトのフラグが付いたファイルを探して実行します。

レジストリ

レジストリコマンドを使用すると、string(文字列型)とdword(数値型)のレジストリ値の作成または変更を実行できます。 「Registry」キー名の下のすべてのキーは、作成したい、または開きたいレジストリキーへのフルパスとして扱われます。 そのキーで「string」または「dword」キーを指定します。 「string」または「dword」キーに保存されたすべてのキー名および値は、取得・設定されるレジストリ名と値になります。
レジストリキーに既定値を設定する場合は、キー名に「(Default)」と入力してください。

プロセスの実行

Run Processコマンドを使用すると、ユーザーがゲームを初めて起動する前に、アプリケーションにプログラムを実行させることができます。
プログラムを実行する必要があるかどうかを判断するために、インストールスクリプトはHasRunKey値のキー名を(レジストリのDWORD値として)確認します。 値が存在しない、または0の場合、processXX/commandXX値でCreateProcessを呼び出します。 CreateProcessが失敗した場合、ShellExecuteExが呼び出されます。 プログラムのExitCodeが0の場合、インストールスクリプトは成功したと仮定し、レジストリでキー名を1として書き込みます。

Steamユーザーは高速なサイレントインストールを好みます。 すべてのRun Processコマンドにサイレントまたは非表示用のパラメーターを追加してください。追加するのはゲームに絶対に必要なものだけにしてください。
Run Processに必要なキー/値:
  • Process 1-起動したいプログラムへのパス
Run Processのオプションのキー/値:
  • Command 1-プログラムに渡すオプションのコマンド。
  • HasRunKey-前提条件がすでにインストールされているかどうかをチェックするオプションのレジストリキー。
  • NoCleanUp-オプションのフラグ。設定されていると、アプリがSteamから削除されても、インストールスクリプトはキー名を削除しません。
  • MinimumHasRunValue-プログラムの起動を決定する際に、インストールスクリプトがチェックする最小値を設定するオプション。
  • Requirement_OS-OS要件を適用するためのオプションキー。 See OS Specific Requirements for more details.
  • AsCurrentUser-オプションのフラグで、現在のユーザーとしてプログラムを実行することが重要である場合は1に設定します。 それ以外の場合、Steamクライアントは管理者として実行し、Big PictureまたはVR環境での昇格時のプロンプトを回避します。

ファイアウォールの例外

ゲームがネットワークを使用する場合には、ファイアウォールの例外を使用して、ユーザーに例外を受け入れるように強制することなく、Windowsが自動的にファイアウォールを介してゲームを許可するようにしてください。
"Firewall" { "Space War Game" "%INSTALLDIR%\\SpaceWar.exe" }

OS Specific Requirements

Requirement_OS値は異なるOSバージョン/SKU上で別のインストールを実行するのに利用できます。 これにはRequirement_OSと呼ばれる新しいキーグループと、その中の追加のキー値のペアが必要になります。 利用できるOSのオプションは以下の通りです。
  • Is64BitWindows-オペレーティングシステムの64ビットバージョン上でのみプロセスを実行するよう指定します。 値は1または0です。
  • OSType -オペレーティングシステムの特定のバージョン上でのみプロセスを実行するよう指定します。 値は以下のものになります:
    • Windows 3.11
    • Windows 95
    • Windows 98
    • Windows ME
    • Windows NT
    • Windows 2000
    • Windows XP
    • Windows 2003
    • Windows Vista
    • Windows 7
    • Windows 2008
    • Windows 2012
    • Windows 2012 R2
    • Windows 8
    • Windows 8.1
    • Windows 10

64ビットの例
これは32または64ビットのインストーラーで適切なインストーラーを実行する例です。
"Net32" { "Process 1" "%INSTALLDIR%\\redist\\Controller\\32bitInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "Is64BitWindows" "0" } } "Net64" { "Process 1" "%INSTALLDIR%\\redist\\Controller\\64bitInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "Is64BitWindows" "1" } }

OS Typeの例
この例はWindows XPでのみ実行します。

"Controller" { "Process 1" "%INSTALLDIR%\\redist\\WinXPInstaller.exe" "NoCleanUp" "1" "Requirement_OS" { "OSType" "Windows XP" } }

環境変数

環境変数はインストールスクリプトでサポートされています。 Windowsで利用可能なすべての標準環境変数は、インストールスクリプトに固有の他のいくつかの環境変数と共に使用できます。 環境変数には以下のものがあります:
  • %INSTALLDIR%-アプリケーションがインストールされた場所のフルパス(バックスラッシュなし)
  • %ROOTDRIVE%Cのようなアプリケーションがインストールされた場所のドライブ文字
  • %APPDATA% - \Users\username\AppData\ フォルダー
  • %USER_MYDOCS%-ユーザーの\My Documentsフォルダーを取得する
  • %COMMON_MYDOCS%-All Users\Documentsフォルダーを取得する
  • %LOCALAPPDATA%-\Documents and Settings\username\Local Settings\Applicationのデータフォルダー(Vistaおよびそれ以降のバージョン)
  • %WinDir%-Windowsインストールディレクトリ
  • %STEAMPATH%-Steamクライアントのインストールディレクトリへのフルパス

これらは一般的なパスですが、ユーザーが実行しているWindowsのバージョンによって異なる場合があることに注意してください。

言語固有の値

ユーザーがSteamの実行に使用している言語に応じて、stringとDWORDの両方の値に異なるデータを割り当てることができます。 これを行うには、「string」または「dword」キーに言語名を含むサブキーを作成し、そこに名前と値を割り当てます。 以下はその例です:
"InstallScript" { "Registry" { "HKEY_LOCAL_MACHINE\\SOFTWARE\\MonkeyDime Studios\\Killer Banana Peel" { "dword" { "english" { "Language" "1" } "french" { "Language" "2" } "german" { "Language" "3" } "italian" { "Language" "4" } "spanish" { "Language" "5" } } } } }

インストールスクリプトは、「Language」の値を照会することでSteamのレジストリキーから言語を取得します。 この値が見つからない場合は、「english」がデフォルトになります。

アプリのアンインストール

ユーザーがSteamからアプリを削除または確認すると、インストールスクリプトが呼び出され、そのアプリが作成したすべてのレジストリ値が削除されます。 また、インストールスクリプトは、Run Processからプログラムを実行するかの決定に使用される値を削除するため、次回のアプリ起動の際に実行可能となります(NoCleanUpフラグが設定されている場合を除く)。

アンインストール時のRun Process

アプリのアンインストール時に何らかのプロセスを実行する必要がある場合は、インストールスクリプトに追加します。 DirectXやMSVCランタイムなどの一般的な再頒布可能ファイルは、他のゲームでも使用されている場合があるため、アンインストールしないでください。 これは、ゲーム固有のアンインストールプロセスのみを対象としています。
注意: 「Run Process On Uninstall(アンインストール時実行のプロセス)」は、ユーザーがSteamでアプリを確認する際にも呼び出されます。 すべてのファイルを削除するプロセスを実行しないでください。実行した場合、Steamはすべてを再ダウンロードすることになってしまいます。
"InstallScript" { "Run Process On Uninstall" { "Process_name" { "Process 1" "process.exe" "Command 1" "/command" } } }

よくある質問

Q. ゲームを起動するたびにインストールスクリプトが毎回再頒布可能ファイルをインストールしようとするのはなぜですか?
A. これは通常、再頒布可能ファイルがゼロ以外のリターンコードを返していることを意味します。 Steamはリターンコードがゼロかどうか確認します。 リターンコードがゼロであることを確認すると、再頒布可能ファイルはインストール済みとされ、再度実行されることはありません。 それ以外の値を返した場合、Steamは次回の起動時に再度実行しようとします。

この問題を解決するには、再頒布可能ファイルのパスとパラメーターを確認してください。 一部の再頒布可能ファイルは、マシン上にすでに存在する場合、ゼロ以外の値を返します。 これは多くの場合、再頒布可能ファイルのsilentまたはquietフラグを使用することで解決できます。

Q. レジストリキーが書き込まれないのはなぜですか?
A. 通常、これは、未署名のインストールスクリプトで、HKLMに書き込もうとしていることが原因です。
Steamでは、HKLMへの書き込みに、この署名が必要であるため、ビルド統合のセクションを参照し、ビルド時に「kvsignatures」キーがスクリプトに追加されたことを確認してください。

また、64ビット版WindowsでWindows 64ビット仮想化が行われている場合、SteamがレジストリのWow6432Nodeパスに書き込むこととなるため、同様の問題となり得ます。

Q. インストールスクリプトが全く実行されないのはなぜですか?
A. 設定が適切に準備されていることを再確認してください。

Q. macOS用の再頒布可能ファイルを追加するにはどうすればよいですか? macOSのインストールスクリプトでRun Processが動作しないのはなぜですか?
A. 現在、macOSの再頒布可能ファイルのインストールはサポートされていません。 インストーラーはメインの実行ファイルに入れる必要があります。