SSブログ

InstallShield インストール済みファイルの名称変更方法 [InstallShield]

InstallShieldバージョン: 2010

プロジェクトタイプ: InstallScriptプロジェクト

InstallShield2010のInstallScriptプロジェクトで、インストールするファイル名の中に日本語名のファイルがあるとコンパイルエラーとなる。この対応としてインストール時は英語のファイル名とし、インストール完了後、日本語にリネームする方法で対応する。

ただしアンインストール時にリネームしたファイルは残ってしまう。またInstallShield2012Springでは日本語ファイル名でもインストールが可能だった。

1.インストールデザイナから「動作とロジック」、「InstallScript」を選択する。

2.「ファイル」フォルダ内の「Setup.Rul」を選択するとスクリプトのソースコードが表示される。

image

3.「関数」フォルダ内の“RenameToJapaneseFileName”(これはユーザー作成の関数)を選択し、以下のコードを追加する。

image

// 英語名ファイル保存場所へのパス

folder_path = Folder_Path ^ "PrintTemplate\\sample\\Japanese\\";

src_file_name = "ShipingList.pdf"; // 英語名ファイル名

dst_file_name = "出荷リスト.pdf"; // リネーム後の日本語ファイル名

if(FindFile(folder_path, src_file_name, temp) == 0) then

    // RenameFileは上書きしてくれないので、すでにリネーム後ファイル名のファイルがある場合は削除する

        if(FindFile(folder_path, dst_file_name, temp) == 0) then

            DeleteFile(folder_path + dst_file_name);

        endif;

    // リネーム実行

    RenameFile(folder_path + src_file_name, folder_path + dst_file_name);

endif;

ちなみにこの関数は“OnFirstUIAfter”および“OnMaintUIAfter”イベントハンドラ関数内で呼び出す。

OnFirstUIAfter関数: これは、アプリケーションの初回インストール用の機能をインストールした後に処理しなくてはならないタスクを実行します。

OnMaintUIAfter関数: このイベント ハンドラでは、アプリケーションのメンテナンス インストールによって機能が再インストールされた後に発生するタスクが実行されます。


InstallShield インストール済みアプリのバージョンをレジストリから取得する方法 [InstallShield]

InstallShieldバージョン: 2010

プロジェクトタイプ: InstallScriptプロジェクト

管理者権限でインストールされたアプリケーションをユーザー権限でアップデートする場合、インストール済みのバージョンが取得できずエラーとなりインストールが続行出来ない、アプリケーション側に権限による問題が無い場合、これを無視してインストールする場合に行う方法。InstallScriptを利用して実現する。

1.インストールデザイナから「動作とロジック」、「InstallScript」を選択する。

2.「ファイル」フォルダ内の「Setup.Rul」を選択するとスクリプトのソースコードが表示される。

clip_image002

3.ソースコード上部にあるタブから「Initialization」と「OnSetupUpdateMode」を選択する。

clip_image004

4.OnSetupUpdateMode”関数内の先頭に以下のコードを追加する。

if ((IFX_INSTALLED_VERSION="") && MAINTENANCE) then

    /* レジストリに登録されているバージョン情報を取得します。*/

    RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);

    /* “RegDBGetKeyValueEx”関数の第三引(取得するValueのタイプ)は、number型の変数nSrに保存してから、与えないとエラーとなる。RODUCT_GUIはインストールするアプリに割り当てられた固有番号が保存されているInstallShieldのグローバル変数。 */

    nSr = REGDB_STRING;

    szMyGuidStr

= "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + PRODUCT_GUID;

    RegDBGetKeyValueEx( szMyGuidStr, "DisplayVersion", nSr, szVersionString, nSize );

    IFX_INSTALLED_VERSION = szVersionString;

endif;

これでインストールの初期化時にインストール済みのバージョンをレジストリから取得し、Installshieldグローバル変数IFX_INSTALLED_VERSION に値を設定すればインストールが続行できる。


InstallShield インストール中 任意のアプリを起動する方法 [InstallShield]

InstallShieldバージョン: 2010

プロジェクトタイプ: 基本のMSIプロジェクト

方法: システム検索ウィザードを使用して実現する。

1.インストールデザイナから「動作とロジック」->「カスタムアクションとシーケンス」を選択する。次にカスタムアクションを右クリックし、カスタムアクションウィザードを起動する。

clip_image002

2.カスタムアクション ウィザードでカスタムアクションを作成する。

① ようこそ

clip_image004

②基本情報

名前に起動するファイル名「PsExec」、コメントに「インストール完了後にインストールしたアプリケーションの中の一つを起動する。」を入力する。これらは任意の値でOK。

clip_image006

③アクションの種類

種類は「実行可能ファイルの起動」を選択する

clip_image008

場所は「製品と一緒にインストール」を選択する。

clip_image010

④アクションのパラメータ

ソースにこのアプリケーションのインストール情報を設定する。

参照ボタンでファイルを実行ファイル“PsExec.exe“を選択する。

clip_image012

ターゲットを空欄のまま次へ進みます。

clip_image014

⑤追加オプション

戻り値の処理に「非同期(完了を待機しない)」を選択する。

clip_image016

⑥応答オプション

スクリプト内実行はディフォルトのまま進みます。。

clip_image018

⑦シーケンスへ挿入する

インストールUIシーケンスに「次の後:ExecuteAction」を選択します。

clip_image020

⑧概要

内容を確認して問題なければ「完了」ボタンを押す。

clip_image022

カスタムアクションが登録される。

clip_image024

3.動作確認

インストール完了時に、PsExec.exeが起動し、初回インストール時に求められる、使用許諾の画面が現れました。

clip_image026


「製品版InstallShield」と「Visual Studio Installerツール」の比較 [InstallShield]

InstallShieldは、Visual Studio Installerツールでは利用できなかった下記のようなさまざまな機能をサポートしている。

  • ダイアログエディター:ダイアログのルック&フィールを自社のブランドに合う形に変更可能。またユーザーに追加のデータ入力を促すカスタムダイアログの作成も可能
  • アップグレードおよびパッチのサポート:インストーラーを修正するためのパッチおよびアップグレードの作成が可能
  • MSI検証:MSIがマイクロソフトのロゴガイドラインに沿っているかどうかを検証し、問題があれば容易に修正することが可能
  • コンポーネントおよび機能の管理:製品を機能に分割することにより、エンドユーザーに、ヘルプライブラリやAdd-onなど、オプション類のインストールを選択させることが可能
  • カスタムアクションをサポート:外部の機能を利用するカスタムアクションの利用が可能
  • ランタイム言語:35の言語でダイアログ一式を提供しているため、翻訳作業の必要がなく、時間とコストの削減が可能
  • データベースとIIS設定:MSIを拡張し、IISおよびデータベースとの連携が可能。SQL関連のタスクやIIS Webサイト、仮想ディレクトリ、Webサービスの拡張、およびアプリケーションプールを管理可能

VisualStudio 2010版 InstallShield Limited Edition テンプレート (6種類)

image

InstallShield 2013 Premier Edition with Virtualization Pack テンプレート (21種類)

image

参考サイト


InstallShield インストールトラブル[2] [InstallShield]

過去のバージョンにダウングレードインストールしようとすると、変な挙動となる。

ダウングレード時の問題

  1. ファイルのバージョンを比較し、新しいバージョンが入ってのでコピーしないと判断。
  2. 前のバージョンのアンインストールが行われる、ファイルが削除される。
  3. 今回のバージョンはコピーされない。
  4. ファイルがなくなる。

コンポーネントの「上書きしない」オプション

キーパスが明示的に設定されていない場合、オプションンが無視されるように見える場合がある

  1. 既存のファイルの更新日時が作成日時と同じまたは古い
  2. 既存のファイルとインストールするファイルのハッシュが違う

よって,上書きしたくないファイルは,1つずつコンポーネントに分割し,それぞれキーファイルに指定する必要がある。

 

参考サイト


UAC(User Account Control) [InstallShield]

Microsoft Windows Vista以降より導入されたセキュリティの基盤となる技術である。許可のない限りアプリケーションを標準ユーザの権限で動かすことで、不用意にマルウェアなどがオペレーティングシステムに変更を加えられないようにする狙いがある。

Windows Vistaからは、管理者のユーザとしてログオンするとアクセストークンが2つ用意される。1つは標準ユーザと同じ権限、もう1つは完全な管理者の権限を持っている。管理者としてログオンしてプログラムを実行しても通常は標準ユーザと同じ権限しかなく、セキュリティもしくはOSの安定性に関わる操作を行おうとすると、「昇格のプロンプト」[1]と呼ばれる、実行を許可するか確認を取るダイアログが表示される。ここでユーザが許可すると、権限が「昇格」されてはじめてプログラムは管理者権限で実行される。なお、標準ユーザであってもダイアログは表示されるが、許可するには管理者の資格情報の入力が必要となり、許可した場合プログラムは選択した管理者の権限で実行することになる。

 

参考サイト


InstallShield インストーラトラブル[1] [InstallShield]

「アプリケーションのインストールされているバージョンが確認できません。セットアップを終了します。」と表示されインストールを続行できなくなる症状の原因と対策。

原因

  • ユーザーアカウントでインストールしている。
  • 正規バージョンのインストールをしない状態でアップデート専用のインストーラを利用した。
  • InstallShield 10, 10.5 11 固有の問題で、以下の条件がそろった場合に発生する。

・元のインストーラとアップデートインストーラの製品GUIDが同一である。
・元のインストーラとアップデートインストーラは異なるInstallShieldで作成している。
・InstallScriptプロジェクトを利用している。
・アップデートインストーラはInstallShield 10,10.5,11で作成している。
・アップデートインストーラの利用するエンジンはシステムに存在するが、ISproBE.tlbファイルの更新日付がアップデートインストーラが必要とする日付より以前のものである。

 

参考サイト


InstallShield 2010 Build Error -7184 [InstallShield]

症状 : 

InstallScriptプロジェクトで、デフォルト言語を英語とし、日本語名のファイルをインストールさせる設定でビルドすると発生する。

説明 :

「FileName 列(File テーブル)には、コードページ 1252 で使用できない文字が含まれています: ”日本語取説.pdf” -7184

メーカのサイト検索 :

Flexera Software

Error or Warning Number : 

–7184

Description :

The Find What setting for the %1 text replacement is not configured. This text replacement will not be performed.

Troubleshootoing Information :

You have added a replacement item to a replacement set in the Text File Changes view; however, the value for the Find What setting is blank. This setting must have a value; otherwise, the text file changes are not made at run time.

For more information, see Specifying Search-and-Replace Criteria for a Text File Change.

翻訳(excite翻訳より) :

InstallScriptプロジェクトを使用しているか、UTF-8データベースを使用したくない場合は、それが適切なコードページからの文字を使用するように、エラーメッセージに述べられているデータを変更してください。
例えば、エラーメッセージがショートカット・テーブルに言及する場合は、ショートカット視界中のストリングを変更することを考慮してください。

対策案 :

1. 最新のInstallShieldを購入する。2010からのアップグレード版は無い。(NetWorld調べ)

InstallShield 2013 Premier Windows 日本語版 ¥787,500
InstallShield 2013 Professional Windows 日本語版 ¥378,000
InstallShield 2013 Express Windows ¥114,450

2. ファイル名を英語にする。

3. デフォルト言語を日本語にする。(英語、日本語環境以外のPCで日本語表示してしまうからNG)

4. 基本のMSIプロジェクトに変更する。

こんなところか!


InstallShield 「常に上書き」する方法 [InstallShield]

「編成」->「コンポーネント」->上書き対象のコンポーネント選択「DefaultComponent」->「上書き」

image

image

「バージョンまたは日付に関係なく常にファイルを上書き」を選択すればよい。


InstallShield readmeファイルを表示する方法 [InstallShield]

インストール終了後に、注意事項などを記述したreadmeファイルが表示されることがある。これの実現方法について記述する。

「動作とロジック」->「InstallScript」->「ファイル」->「Setup.Rul」->「Afetr Move Data」->「OnFirstUIAfter」

image

以下のようにコードを修正する。

    bvOpt2 = TRUE; // enable check box
    szOpt2 = "利用上の注意を確認する!"; // %p expands to product name
    SdFinish(szTitle, szMsg1, szMsg2, szOpt1, szOpt2, bvOpt1, bvOpt2);
    if (bvOpt2) then
        LaunchApp(WINDIR ^ "Notepad.exe", TARGETDIR ^ "readme.txt");
        //LaunchApp(TARGETDIR ^ "Tutorial.exe", "");
    endif;
    //SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bvOpt1 , bvOpt2 );

 

これでインストール完了後に、”readme.txt”ファイルが開かれる。念のため、”readme.txt”は「読取り専用」に設定しておく。

image

以上


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。