InstallShield インストール中 任意のアプリを起動する方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: 基本のMSIプロジェクト
方法: システム検索ウィザードを使用して実現する。
1.インストールデザイナから「動作とロジック」->「カスタムアクションとシーケンス」を選択する。次にカスタムアクションを右クリックし、カスタムアクションウィザードを起動する。
2.カスタムアクション ウィザードでカスタムアクションを作成する。
① ようこそ
②基本情報
名前に起動するファイル名「PsExec」、コメントに「インストール完了後にインストールしたアプリケーションの中の一つを起動する。」を入力する。これらは任意の値でOK。
③アクションの種類
種類は「実行可能ファイルの起動」を選択する
場所は「製品と一緒にインストール」を選択する。
④アクションのパラメータ
ソースにこのアプリケーションのインストール情報を設定する。
参照ボタンでファイルを実行ファイル“PsExec.exe“を選択する。
ターゲットを空欄のまま次へ進みます。
⑤追加オプション
戻り値の処理に「非同期(完了を待機しない)」を選択する。
⑥応答オプション
スクリプト内実行はディフォルトのまま進みます。。
⑦シーケンスへ挿入する
インストールUIシーケンスに「次の後:ExecuteAction」を選択します。
⑧概要
内容を確認して問題なければ「完了」ボタンを押す。
カスタムアクションが登録される。
3.動作確認
インストール完了時に、PsExec.exeが起動し、初回インストール時に求められる、使用許諾の画面が現れました。
「製品版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種類)
InstallShield 2013 Premier Edition with Virtualization Pack テンプレート (21種類)
参考サイト
RtSleep()の限界(誤った例)まとめ INTime [INtime]
以下のコードが正しく動作しない理由まとめ
while(1){
// 1ms周期でデバイスの状態を確認する。
RtSleep( 1 );
bFlg = inbyte( wBase + IRQ_TAG );
bState = inbyte( wBase + STATE_TAG );
}
上のコードは正しく意図どおり動作いたしません。これはINtimeの高レベルティック周期が10msであることに関連します。RtSleep()に指定できる最短周期は10msです。RtSleep( 1 ) は事実上 RtSleep( 0 )ということになり、指定した1msの周期で動作することにはならないのです。
さらに RtSleep( 15 ) とした場合、 この指定により意図どおり15ms待機を行うわけではありません。これは15msという時間値を高レベルティック値に変換するためです。
高レベルティックへの変換とは、指定値を高レベルティック周期 10ms単位に丸 めるということです。すなわちこの場合、周期単位10に満たない端数の5は切捨て されるということを意味します。そして実行時 にはRtSleep(10)のように動作します。
対応方法
1. 低レベルスリープ knRtSleep()
1msの周期で処理を行う必要がある場合もあるでしょう。
そういった場合、低レベル関数であるknRtSleep()を使用します。
knRtSleep( UsecsToKticks( 1000 ) ); // 1msのスリープ要求
ただしカーネルティックが1000us以下に設定されている必要があります。たとえばknRtSleep(100)のようにカーネルティック値よりも小さな値に設定しても、100usのスリープとはなりません。実際は以下のようにカーネルティックでの動作となってしまいます。
◆INtime 3.0 設定可能なカーネルティック値
100us
125us
200us
250us
500us
1000us
2000us
5000us
10000us
- カーネルティック=500usの場合
- knRtSleep( 1 ) は 約500usのスリープを意味します。
- カーネルティック=200usの場合
- knRtSleep( 1 ) は 約200usのスリープを意味します。
2. RtSleepEx()
INtime3.0バージョン以降では、㍉秒単位で時間指定が可能なRtSleepExコールが実装されています。このコールを含んだアプリケーションは、以前のINtimeバージョンで動作しませんのでご注意ください。
RtSleepEx( 6 ); // 6msのスリープ要求
参考サイト
3. OpenCVを使って画像処理(アプリ開発編) [OpenCV]
サンプルコード
Webにあったコードを書いて実行してみた。
#include "opencv2\opencv.hpp"
int _tmain(int argc, _TCHAR* argv[])
{
//画像データの読込
IplImage* src_img = cvLoadImage("C:\\OpenCV2.4.6\\opencv\\samples\\cpp\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_img == NULL){
return 0;
}
//表示ウィンドウの作成
cvNamedWindow("src");
cvNamedWindow("dst");
//処理後画像データの確保
IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);
//画像処理例(ガウシアンフィルタ)
cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);
//画像の表示
cvShowImage ("src", src_img);
cvShowImage ("dst", dst_img);
//キー入力待ち
cvWaitKey (0);
//全てのウィンドウの削除
cvDestroyAllWindows();
//画像データの解放
cvReleaseImage(&src_img);
cvReleaseImage(&dst_img);return 0;
}
実行画面
ウインドウズ コンソールとオリジナル画像そしてガウシアンフィルタ後の画像が現れます。そして何かキーを押すと終了します。
簡単ですね。デバッグビルドNGで少し悩みましたけど、比較的簡単にここまでたどり着けました。次回はもう少しいろいろなサンプルを動かして動作を理解していくことにします。
参考サイト
2. OpenCVを使って画像処理(ライブラリ登録編) [OpenCV]
ライブラリの登録
OpenCVにかぎらず、ライブラリ(lib)の登録方法に幾つかのやりかたあることが判明したので記録しておく
1.プロパティに登録
一つ目は前回のインストール編で紹介したように、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する方法。
2.ソースコードに記述
二つ目は、ソースコード上に記述する方法。以下のように、Debug/Release版を分けて読み込む方法。
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_calib3d246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_core246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_flann246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engined.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ml246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_nonfree246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ocl246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_photo246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_stitching246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_superres246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ts246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_video246d.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_videostab246d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_calib3d246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_contrib246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_core246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_flann246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_gpu246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_haartraining_engine.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_legacy246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ml246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_nonfree246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ocl246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_photo246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_stitching246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_superres246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_ts246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_video246.lib")
#pragma comment(lib,"C:\\OpenCV2.4.6\\opencv\\build\\x86\\vc10\\lib\\opencv_videostab246.lib")
#endif
3.プロジェクトに登録
三つ目はVisual Studioのプロジェクトに登録する方法。
開発環境を選ばないことから二番目のソースコードに記述する方法が一般的かと思える。
OpenCVを使って画像処理(インストール編) [OpenCV]
ダウンロード
以下のサイトからWindows版を後、最新版をダウンロードする。現在の最新版は OpenCV-2.4.6.0.exe でした。
http://sourceforge.net/projects/opencvlibrary/files/
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
インストール
ダウンロードしたOpenCV2.4.6.0.exeをクリックし起動する。
[…]ボタンを押してインストール先を指定し、「OK」ボタンを押すとインストールが開始される。それに先立ちインストールフォルダ「C:\OpenCV2.4.6」を作成しておくこと。
環境設定
この状態ではファイルが解凍されただけなので環境設定する。
スタートメニューから「コントロールパネル」、「システム」、「システムの詳細設定」と選択し「システムのプロパティ」を起動する。
ここで「詳細設定」田ぬ、「環境変数」ボタンを押し「環境変数」ダイアログを起動する。
システム環境変数のリストから「Path」を選択し「編集」ボタンを押す。
変数値に以下の2つの値を追加して「OK」ボタンを押す。
C:\OpenCV2.4.6\opencv\build\x86\vc10
C:\OpenCV2.4.6\opencv\build\x86\vc10\bin
コンパイルテスト
Visual Studio 2010から「Visual C++」「Windows フォームアプリケーション」プロジェクトを作成する。
“stdafx.h”に以下のコードを追加。
#include <opencv/cv.h>
#include <opencv/highgui.h>
プロジェクトのプロパティダイアログを起動する。
インクルードディレクトリの設定
「構成プロパティ」「VC++ディレクトリ」「インクロードディレクトリ」、「▼」ボタン、「編集」と選択し「インストールディレクトリ」ダイアログを起動する。
「フォルダ」アイコン、「…」ボタンと選択しディレクトリ選択ダイアログを起動する。
インクルードディレクトリ”C:\OpenCV2.4.6\opencv\build\include”、ライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”を設定する。
共通言語ランタイムサポートを(/clr)へ変更する。
この状態でビルドすると以下のような「未解決の外部シンボルエラー」が発生する。
error LNK2019: 未解決の外部シンボル _cvReleaseImage が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvWaitKey が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvShowImage が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvMoveWindow が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvNamedWindow が関数 _main で参照されました。
error LNK2019: 未解決の外部シンボル _cvLoadImage が関数 _main で参照されました。
解決方法は、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する。
今回登録したのは以下の40個のライブラリです。
opencv_calib3d246.lib
opencv_calib3d246d.lib
opencv_contrib246.lib
opencv_contrib246d.lib
opencv_core246.lib
opencv_core246d.lib
opencv_features2d246.lib
opencv_features2d246d.lib
opencv_flann246.lib
opencv_flann246d.lib
opencv_gpu246.lib
opencv_gpu246d.lib
opencv_haartraining_engine.lib
opencv_haartraining_engined.lib
opencv_highgui246.lib
opencv_highgui246d.lib
opencv_imgproc246.lib
opencv_imgproc246d.lib
opencv_legacy246.lib
opencv_legacy246d.lib
opencv_ml246.lib
opencv_ml246d.lib
opencv_nonfree246.lib
opencv_nonfree246d.lib
opencv_objdetect246.lib
opencv_objdetect246d.lib
opencv_ocl246.lib
opencv_ocl246d.lib
opencv_photo246.lib
opencv_photo246d.lib
opencv_stitching246.lib
opencv_stitching246d.lib
opencv_superres246.lib
opencv_superres246d.lib
opencv_ts246.lib
opencv_ts246d.lib
opencv_video246.lib
opencv_video246d.lib
opencv_videostab246.lib
opencv_videostab246d.lib
リリースビルドOKとなりました。しかしデバッグビルドはNGです。以下のエラーがでます。
エラー 1 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvsamples.obj) OpenCV_Test
エラー 2 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvcommon.obj) OpenCV_Test
エラー 3 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvhaartraining.obj) OpenCV_Test
エラー 4 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvboost.obj) OpenCV_Test
エラー 5 error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '0' が 2 の値 'AssemblyInfo.obj' と一致しません。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\opencv_haartraining_engine.lib(cvhaarclassifier.obj) OpenCV_Test
警告 6 warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\OpenCV_Test\LINK OpenCV_Test
エラー 7 error LNK1319: 5 の不一致が検出されました C:\Users\2023786\Documents\Visual Studio 2010\Projects\OpenCV_Test\Debug\OpenCV_Test.exe 1 1 OpenCV_Test
先に行った、「プロジェクトのプロパティ」ダイアログから「構成プロパティ」「リンカー」「入力」を選択し、「追加の依存ファイル」にライブラリディレクトリ”C:\OpenCV2.4.6\opencv\build\x86\vc10\lib”内のライブラリすべてを登録する。から以下の2つのライブラリを削除したらビルドOKとなった。この2つライブラリの情報にたどり着けなかったので、無視して開発を進めることにします。
opencv_haartraining_engine.lib
opencv_haartraining_engined.lib
インストール編は以上で終了とします。次回はアプリケーションの開発編とします。
参考サイト
- http://gihyo.jp/dev/feature/01/opencv
- http://vision-ex.blogspot.jp/2013/05/opencv-245-windows-7-64bit.html
- http://claimant.cocolog-nifty.com/blog/2013/04/opencv-245-2b05.html
- http://imagingsolution.net/program/opencv/opencv2-4-dynamic-downlaod-install/
「Hab It! - 習慣、目標」を使ってみた [WEBサービス]
「Hab It!」とは、習慣化したいと思う行動を登録しておき、実行したらチェックすることで記録を残していくアプリです。
iPhone用アプリの紹介をNaverで見ていらい、Android版を探していましたが、なかなか良さそうなものが見つからず、しかたなくiOS版をiPadに入れてみました。しかし毎日持ち歩かないと入力することを忘れることが多く、しだいに使わなくなりました。
Webを見ていて、たまたま「Hab It!」を見つけたので使っている見ることにしました。同時に「Habit Streak」もインストールしたので、こちらの使用感も別途、アップしたいと思います。
インストール
Google Playストアで「Hab」で検索すると出てくるので「Hab It!」を選択してインストールします。インストールが完了すると、使い方のページとなるので「スキップ」するか「次へ」ボタンを押して先に進みます。
途中Facebookへのログイン画面が現れますが、ここでは[>]をタップし先に進みます。インストール後でもFacebookとTwitterと共有設定が可能です。
習慣の登録
アプリを起動すると習慣を登録する画面となるので、リストから選択することも、新たに登録することもできます。そのさいに「良い習慣」または「悪い習慣」を選択できます。悪い習慣の傾向も見ることができるのが良さそうです。
早速登録しましたが、無料版では習慣を3つまで登録可能でした。
プレミアム版は、以下のプランにわかれています。
プラン | 料金 | 習慣の数 | 広告 |
1ヶ月 | $0.99/月 | 200 | 無し |
1年 | $1.99/年 | 200 | 無し |
無制限 | $3.99 | 無制限 | 無し |
登録内容は以下の3つとしました。フィットネスはランニング、スタジオレッスン、筋トレ等、もう少し細かく分類したいし、朝食も追加したい。その他にも生活習慣を考えるといくらでも出てきそうです。しばらく使って良ければプレミアム版にしたいと思う。
Windows 7 で"ファイル名を指定して実行"する方法 [Windows]
1. ダイアログを呼び出す場合
Windows キー + R
2. スタートメニューに表示する場合
スタートボタンンを右クリックしてからプロパティを選択する。
プロパティダイアログが現れたら「カスタマイズ」ボタンを押す。
”ファイル名を指定して実行”コマンドにチェックを入れる。
追加されました。
InstallShield インストールトラブル[2] [InstallShield]
過去のバージョンにダウングレードインストールしようとすると、変な挙動となる。
ダウングレード時の問題
- ファイルのバージョンを比較し、新しいバージョンが入ってのでコピーしないと判断。
- 前のバージョンのアンインストールが行われる、ファイルが削除される。
- 今回のバージョンはコピーされない。
- ファイルがなくなる。
コンポーネントの「上書きしない」オプション
キーパスが明示的に設定されていない場合、オプションンが無視されるように見える場合がある
- 既存のファイルの更新日時が作成日時と同じまたは古い
- 既存のファイルとインストールするファイルのハッシュが違う
よって,上書きしたくないファイルは,1つずつコンポーネントに分割し,それぞれキーファイルに指定する必要がある。
参考サイト