none
VB2010で作成したアプリケーションを無人モードでインストールする方法について RRS feed

  • 質問

  • 初めて投稿します。ご存知の方がおらればご教示いただきたく思います。

    VB2010のSetupプロジェクトから[setup.exe]と[Setup.msi]を作成しました。
    通常は、パソコン(Win7)毎に手動で[Setup.msi]を実行しインストールを実施しています。
    インストール手順は下記の通りで、パラメータは初期値のままで画面に応答するだけです。
    <インストール手順>
    ①セットアップウィザードへようこそ
     →[次へ]をクリック
    ②インストールフォルダの選択
     ・フォルダー[C:\~]
     ・すべてのユーザー
     →[次へ]をクリック
    ③インストールの確認
     →[次へ]をクリック
    ④インストール中・・・
    ⑤ユーザアカウント制御
     ~コンピュータの変更を許可しますか?
     →[はい]をクリック
    ⑥インストールが完了しました。
     →[閉じる]をクリック

    今後、無人モードでのインストール運用も考えております。
    無人モードでの以下インストールコマンドを実行した場合、
    上記<インストール手順>のようにパラメータは初期値のままで
    インストールされるのでしょうか?
    「msiexec /i setup.msi /quiet」または、「msiexec /i setup.msi /passive」

    以上です。

    2015年4月10日 4:57

回答

  • とっちゃん様

    丁寧な回答ありがとうございました。

    とても参考になりました。

    今後もどうぞ宜しくお願いします。

    • 回答としてマーク 星 睦美 2015年4月21日 5:15
    2015年4月20日 1:09

すべての返信

  • 現状を報告します。

    以下コマンドで動作検証した結果、サイレントインストールできているように見えます。
    msiexec /i "C:\setup.msi" /qb /L*v "c:\Instlog.txt" ALLUSERS=1

    改めて質問内容を整理しました。
    1.実現したい事

    旧バージョンのプログラムをアンインストールして、新バージョンのプログラムをインストールする一連の流れを
    すべてサイレントモードで行いたい。(プログラムは、VB2010で作成したアプリケーション。)

    実現する方法を色々調査した結果、VB2010のsetupプロジェクトのプロパティを設定
    ・RemovePreviosversions:True
    →新プログラムのインストールの前に旧バージョンのプログラムを自動削除。
    ・DetectNewerInstalledVersion:False
    →現在インストールされているバージョンよりも古いバージョンをインストールできなくする
    ・InstallAllUsers:True
    →全てのユーザに対しシステムを使用できるようにする。

    次のインストールコマンドを使用し、各インストールパターンを検証しました。
    msiexec /i "C:\setup.msi" /qb /L*v "c:\Instlog.txt" ALLUSERS=1

    結果を[コントロール]-[プログラムと機能]で確認しました。

    ①Ver.01の状態でVer.02をインストール
     →Ver.02がインストールされる(Ver.01はアンインストールされたと思われる)
    ②Ver.02→Ver.02
     →Ver.02が恐らく修復インストールされている
    ③Ver.02→Ver.01
     →Ver.02が追加インストールされる(Ver.01とVer.02が存在する)


    2.知りたい事
    (1)上記③のような旧バージョンにもどしたい場合の手立てはありますでしょうか?
    ・この場合は事前に手動でVer.01をアンインストールするしかないのか
     それともVer.01と同じプログラムをVer.03として作成しインストールするか

    (2)修復インストールについて
    ・同バージョンを何度もインストール可能でありこの場合、修復セットアップとなると思います。
     この修復セットアップとはどのような事をしてくれるのか良くわかりません。
     とりあえず検証した結果、以下の事がわかりました。この修復セットアップというのは削除されている
     ファイルのみ復元するという仕様なのでしょうか?
     ・前回インストールしたファイルのa.iniファイルを削除したあと、同バージョンのプログラム
      をインストールしました。その結果、a.iniファイルは復元されていました。
     ・前回インストールしたファイルのa.iniファイルの内容を編集したあと、同バージョンのプログラム
      をインストールしました。その結果、a.iniファイルはそのままの状態でした。
     (初期のa.iniファイルに置き換わっていない)
     
    (3)インストールログの内容について
    インストールログを詳細モード取得しましたが、内容が複雑でどこをチェックしてよいかわかりません。
    ・上記①のVer.02インストール前にVer.01のアンインストールが成功しているというログはどの箇所か?
    ・どのようなパラメータでインストールされたかどうかは「Property(S):~」の箇所で確認したらよいか?

    以上、宜しくお願いいたします。

    2015年4月14日 1:53
  • プロパティの認識がちょっと違うようなので、補足しておきます。

    順番が逆転してますが...

    >InstallAllUsers

    プログラムをインストールしたマシンすべてのユーザーで利用を強制するか、それとも選択可能にするか。

    ユーザーインターフェースのインストール-開始-インストールフォルダ にある InstallAllUsersVisible を表示するとでてくる、すべてのユーザー/このユーザーのみのラジオ設定のデフォルト値に相当(非表示にした場合は設定した値でインストールが実行される)。

    UI上動的に設定変更できますが、内部的に変更できることが追従しきれないので、どちらか固定にしておくことをお勧めします(Vista 以降にInstallAllUsers=Falseでインストールしたい場合は、正しく設定できないので、IntallShieldLimitedEdition または、WiX の利用をお勧めします)。

    >DetectNewerInstalledVersion

    すでにインストールされている同一の UpgradeCode を持つより大きいバージョンの製品を検出するかどうかのフラグ

    DetectNewerInstalledVersion = True の場合は、すでに新しい製品がインストールされている場合は、エラーメッセージを出してインストールを実行させない。複数バージョンが同居しないようにインストールする場合はかならず True に設定する。

    >RemovePreviosversions

    インストーラを実行するとき、同じ UpgradeCode の古いバージョンを自動でアンインストールする。DetectNewerInstalledVersion 同様、複数バージョンが同居しないようにインストールする場合は必ず True に設定する。

    各プロパティは上記のような判断基準となります。

    アップデートインストールを行う場合は、DetectNewerInstalledVersion = True, RemoveReviousversions = True として、複数のバージョンが同一マシン内で同居しないようにします。

    ・より古いバージョンへのダウングレードについて

    WindowsInstaller はダウングレードインストールをサポートしていません。

    バージョンダウンをさせたい場合は、面倒でもユーザーにインストール済みバージョンをアンインストールしてもらってから、古いバージョンを改めてインストールしてもらう形をとる必要があります。

    ・修復インストールについて

    実際の動作は、同じバージョンで再インストールを行う動作となります。原則すでにファイルが存在するため、バージョン判定ルールに基づいてインストールするしないの判断を行います。

    詳細は File Versioning Rules を見ていただくとして、再インストールの条件をザクッと説明すると

        • ファイルがない場合は新規にインストール
        • インストーラの持つファイルより古いバージョンがインストールされていたら更新(内容が違っていても、ファイルバージョン(AssemblyFileVersion)が同じ場合は更新しません。アセンブリバージョン(AssembyVersion)は参照しません)
        • インストール済みファイルのタイムスタンプが 最終更新日時 <= 作成日時 で、ファイルの内容が違っていれば更新。

    となっています。a.ini ファイルが更新されたりされなかったりというのは、2の条件に合致したりしなかったりということになります。

    ・詳細ログの内容などなど

  • インストールの動作などがうまく行けたかどうかは、Standard Actions について、一通りの知識がないとちょっときついかも。
  • 旧バージョンのアンインストールについては、RemoveExistingProducts が実行されたかどうかで判断ができます。詳細は、Windows Installer そのものについて学習してください。ここで上がってる内容だけでも、きちんと説明しようと思うと、本数章分くらいのボリュームになりますので。

  • とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

2015年4月14日 4:44
  • とっちゃん様

    丁寧な回答ありがとうございました。

    とても参考になりました。

    今後もどうぞ宜しくお願いします。

    • 回答としてマーク 星 睦美 2015年4月21日 5:15
    2015年4月20日 1:09