InstallShield Developer 7に関するTipsです
なぜか、VB専用のウィザードを使っているにもかかわらず、VBのランタイムが入ってないことがある(TT)
そんな時は自分でマージモジュールを足して入れておきましょう。
たとえば、カスタマイズ版のみEXEを他のものと違うものをセットアップに含みたい場合にはリリースフラグを活用すると良い。
「機能」をどんどん増やしていく必要があるが、「リリース」に設定した「リリースフラグ」を「機能」にも指定しておくことでインストーラーに含める内容を切り替えられる。
ただし、これも限りがあって、起動時のスプラッシュや追加と削除のアイコンまでは切り替えることができない。
リリースウィザード中に出てくる表現だが、具体的にどういう区分にすればいいかいまいちわかりづらい。
自分は、「製品構成」毎に製品コードや製品名、バージョンが指定できるので、「製品構成」には製品版、カスタマイズ版、体験版という感じで登録してある。
「リリース」はリリースする時のメディアを別々に指定できるので、ネットワークイメージやCD-ROMという項目を登録している。
ちなみに、リリースフラグは「製品構成」か「リリース」にカンマ区切りで複数指定できる。
「パッケージコードの生成」を「はい」にして、リリースフラグの所に書いていたフラグを製品構成フラグの所にうつしたら直った。
こればっかりは全く謎(笑)
さっきまでうまくいっていたビルドが失敗する場合、パソコン毎再起動するだけで復活することもある。
自分の環境では一度DCOM95のマージに失敗したので、再起動したところビルド可能になった。
ショートカットがうまく働かなかったり、CDを要求されたりしてしまうので、使わない方が無難(と言い切ってよいのか(笑))
msmファイルはISで編集が可能。
エクスプローラーなどで該当ファイルをダブルクリックするとISが立ち上がってプロジェクトウィザードが起動する。
適当に設定して中を見てみれば、どういう基準でファイルがインストールされかなどがわかる。
IS7.04付属のDAO3.6のマージモジュールはdao360.dllのレジストリ登録をしてくれない。
msmファイルをISで開いてみると、確かにコンポーネントのファイルを見るとレジストリ登録が有効になっていない。
何か意味があってそうしているのかわからないが、このままでは使えないので、登録するようにチェックし、マージモジュールをビルドし直した。
ODBCデータソースの追加画面にはツリー形式でドライバとそのDSNが表示されるが、データソースだけではなく、ドライバの部分もチェックを入れてしまった場合は大問題が発生する可能性がある。
(今回はSQLServerのドライバにチェックを入れていた問題が起きました)
ドライバの部分にチェックを入れた場合、アンインストールするとドライバのレジストリまで一緒に消えて、SQLServerに繋がらない、またSQL
Serverを入れ直そうと思ったら、インストール中にエラーが発生してインストールできない、という状態にまで陥る。
もし、そうなってしまった場合は、今マシンに入っているMDACより新しいMDACがある場合は、それを入れれば復活する。
しかし、既に最新が入っている場合は、MDACはインストールされないので、この方法では復旧できない。
上記のSQL Serverのドライバを含めたインストーラーを再度インストールしなおすことで、一応復旧はする。
しかし、ODBCデータソースのドライバにはSQLServerの名前は出てこない( = 新規でSQL
Server用のDSNを作成できない)
おそらく、この場合、OSの再インストールをしなかぎりはドライバの名前は出てこないと思う。
もし、SQL Serverのドライバをセットアップに含めるならば、パーマネントを「はい」にしておけば、アンインストール時に削除されなくなると思うので、問題は起きないかもしれない(未確認)
でも、インストーラーにドライバまで含めないのが一番のように思う。
どうやら、動作が7.01以前と変わっているようです(バグ?仕様変更?)
今までは、上の画面から追加したいファイルを下の画面にドラッグすれば、「AllOtherComponent」かなんかというコンポーネントが勝手に追加されていたのだが、今回から前回指定した(?)コンポーネントへファイルを追加を行ったという動きになります。
新たなコンポーネントにファイルを追加したい場合は、
この二つの方法をうまく使ってやると良いみたいです。
勘弁してよ(T.T)
EXEファイルのバージョンが既にあるファイルと同じか古くないですか?
もしくは、ビルドが面倒でセットアップのディスクイメージのフォルダ(非圧縮でビルドした場合)に直接新しいEXEを放り込んでないですか?
セットアップの時もファイルバージョンを確認して上書きするかどうかを決めるようですが、どうも媒体に含めたファイルのバージョンはビルド時に確認しているっぽいです。
ちゃんとビルドし直せば、上書きされます。
いまだに、この件は未解決。
ナレッジデータベースが更新されていたが、たぶん試してもうまく行かない気がする。
どうも、Windows Installerがベースで動いているので、こっちがどういうときにファイルを更新するか熟知しないとうまく行かない様子である。
しかし、一通りドキュメントを読んで試したのだが、未だに確実にファイルを上書きできていない(T^T)
Install Scriptのコピーコマンドでコピーするのが一番早い気がする。Windowsロゴなんて知ったことか(笑)
アイコンのキーを変更したら直ったような気がするけど、なんか違うかもしれない。
ナレッジデータベースに詳細が書かれていたので、そこを参照。
やはり、不具合が多いのかナレッジデータベースが頻繁に更新されている(笑)
Install ScriptでCreateObjectを使ってSQLDMOを操作するソースを書いた後、ビルドするとその後そのプロジェクトは何をやってもビルド中に強制終了するようになってしまった。
このソースを消しても復活せず、結局プロジェクトを新しく作り直してやっと直った。
ちなみに、以下のようなソース(一部抜粋)。
set objSQLDMO = CreateObject("SQLDMO.SQLServer"); if (objSQLDMO.Status != 1) then objSQLDMO.Start(TRUE,"(local)","sa",""); endif; set objSQLDMO = NOTHING;
+は文字列の結合だが、^の方がお利口のようでパス区切り文字の\が足りなかったら足してくれたりするらしい。
その後、「1628:スクリプトベースのインストールを完了できませんでした」と表示される。
インストール先に「../」などのような指定をしているとこうなる。
さらに、ディレクトリエディタのDirectoryの中にゴミは残りっぱなし。これを消さない限りエラーは直らない。
しかし、変な所を消すと余計に問題が大きくなるので注意。
FeatureIsItemSelected(MEDIA,"MSDE");
と書いた場合、「機能」のMSDEが他のアイテムにぶら下がる形で登録されている場合、セットアップから機能を外していても、上記の表記ではTRUEが返ってくる。
書き方がまずいのか?
アイテムをどこにもぶら下がらない単独の状態にすれば正しく値が返ってくる。
これが同じだと同じ製品だとみなされる。
名前をつけて保存を使ってプロジェクトをコピーした場合は、これを変えるのを忘れないようにする。
どうも、アイコン関係はバグありのようだ(Ver7.0.3現在)
アイコン指定の時にEXEではなく、icoファイルを選ぶと問題が解決することが多い。
インストールしたソフトのボタンの文字だけ文字化けする場合、vb6jp.dllが入って無くて、フォントがMS
P ゴシックとかだと起きるらしい。
マージモジュールの中のVisual Basic Internationalなんとかというのがあるので、それを入れておくと解決するはず?!
SdProductName(@PRODUCT_NAME);
をRebootイベントの所に入れて、名前を割り当てておくと良い。
前のパッケージより新しいパッケージの方がバージョン番号を上げておかないと表示される。
標準プロジェクトではなく、基本プロジェクトならできるようだが、標準プロジェクトではupdate.exeが強制的に作成される様子。
「Visual Basicセットアップを作っているが、どうやってセットアップの動きをかえるかわからん」と引っかかっている人がいるんじゃないだろうか。
起動してすぐの画面に確かにVBのプロジェクトファイルを選んでセットアップを作る機能があるが、これで作られるプロジェクトはMSIプロジェクトの様子。これはInstallShieldの機能を十分に発揮できないプロジェクトでInstall
Scriptも使えません。
こういうときは、標準プロジェクトに変換を掛けるか、最初から標準プロジェクトを作って、あとでVBの依存ファイル検索を行うと良い。
インストールしたドライブの以下のフォルダにソースがあるので、これを使うらしい。
\Program Files\InstallShield\Developer\Script\isrt\src
A-takは実際にはそこまでしていないので、本当にできるかは分からない(笑)。
Developer7に限らず、InstallShield自体の情報は日本のサイトにはほとんどない(T_T)。
専門的なのと値段が高くて一般ユーザーが買えないからでしょうね。
今のところDeveloper7情報だと米国のInstallShield社のQ&Aが一番充実しているかもしれない
InstallShield
のホームページ(日本) ここのナレッジデータベースにはいろいろ情報がある
InstallShield のホームページ(米国) 英語だけどがんばってQ&Aを読もう(TT)
InstallShield
ML 結構活発なML。Developer7はぼちぼち使い始めてる人がいるような感じ。E-groupなので過去ログの検索が出来ない(TT)。がんばって一個ずつ読んでいきましょう。
たとえばMSDEをセットアップしたいので、msdex86.exeを媒体には入れるが、このファイル自体はインストール先に入れたくない場合。
「機能のカスタマイズ」の「セットアップファイル/ビルボード」を開くと、「Disk1」などのツリーがあるので、そこにファイルを追加する。
マージモジュールでついてくるMSDEは使い方がいまいちわからん(笑)
(DATABASEDIRってドコから値取ってくるのさ?知ってる人いたら教えて欲しい^
^)
※ちなみに7.0.3ではフォルダも含めることが出来るようになったようです。
基本中の基本ですがね(汗)
たとえば、MSDEのインストール
LaunchAppAndWait("MSDEX86.exe","-a -f1 \"" ^ SourceDir ^
"\\unattend.iss\"",WAIT);
SourceDirはセットアップexeのあるパスを示すシステム変数。\マークがエスケープ文字。
WAITにすると、exeが終了するのを待って次の処理に移る。
この場合はセットアップ媒体に入れているunattend.issを使ってセットアップするわけです。
バグっぽいです(笑)
日本の代理店に問い合わせ入れたところ、現象を確認したとのこと。
どうなるかというと、MDAC2.7のインストール条件であるIE4SP2以上+Y2Kパッチ2を当てていても、これらのパッチがあたっていないとエラーが出てインストールが先に進みません。結局、MSのMDACのパッチファイルをEXE起動でインストールするようにして、回避しました。
MSDEマージモジュールの使い方が分からないので、こんな流れにしました。
sdDestAskPathダイアログでインストール先をユーザーに選択させる。
設定ファイルのunattend.issファイルをINSTALLDIRにコピー。
unattend.issファイルのszDir(?)やszDataDir(?)に取得したインストール先を設定。設定にはiniファイルを扱う関数を使う。
MSDEX86.exeをキックさせる時にパラメーターで変更したunattend.issを指定。
数値しか指定できないようだけど、そういう仕様なのかもしれん。文字列とか返したかったのに、やってみたところエラーで返せませんでした。もし、そうだとするとfunctionの利便性が低いような気がするが。
外部EXEの起動にも関わるが、
LaunchAppAndWait("MSDEX86.exe"・・・
にした場合Win98では動くが、Win2kなどでは動かない
LaunchAppAndWait(SourceDir ^ "MSDEX86.exe"
このようにするのが正しい。当然と言えば当然。
スクリプトのエディタの上にある、ドロップダウンをクリックして処理対象の機能を選んで、右のドロップダウンでどのイベントかを選択する。
その中に処理を書くと良い。
わかりにくいのが、左と右の二つのドロップダウンを選んで、初めて関数が新規作成されたり、表示されたりすること。
左のドロップダウンだけ選んでも、右には「Installing」とイベントが表示されているが、右のドロップダウンからInstallingを選び直さないと、その関数にはジャンプしないし、新規作成されない。
機能の追加、削除の時のシステム変数INSTALLDIRにはちゃんと、インストール先のパスが記録されている。
その他の独自で変数に保持した値はインストールが終わると破棄されるので、機能の追加、削除時には空っぽになっている。
ファイルをどこかから追加すると、パスの表記を選択する画面が表示されるが、それが時折間違っている時がある。
ちゃんと確認しないと、セットアップ作成時にファイルのシステム情報が取得できないとかいうエラーが出てセットアップが出来ない。
リリースの設定で表題の設定を行い、CD-ROM媒体用のインストーラーを作成しようとするとエラーが発生。
これは、7.0.1のバグで、7.0.3では修正されている様子。
http://support.installshield.com/kb/view.asp?pcode=WIND700E&articleid=Q105438