読者です 読者をやめる 読者になる 読者になる

流れるまにまに。

のんびり人の日々のめも。

【インストーラ】「プログラムの追加と削除」に関わる設定について【Installshield】

Installshieldの「プログラムの追加と削除」に関わる設定やらやら。

使用環境はInstallshield 2013

 

ドライバインストーラを作って、インストールしたのに「プログラムの追加と削除」に表示されない問題が発生。

眠かったからどっか間違って設定変えちゃったのかな。

眠い時って無駄に色んなタブ開いたり、設定見たりするよね。。。

 

 

とりあえず関連する設定場所は2つ

[インストール情報]→[一般情報]→[プログラムの追加と削除]
・「変更ボタンを無効にする」を「いいえ」
・「削除ボタンを無効にする」を「いいえ」

f:id:piyomani:20170204011549p:plain

もう一つ。
[メディア]→[リリース]→対象リリース→[ビルド]タブ
・「[追加/削除]パネルエントリを隠す→「いいえ」

f:id:piyomani:20170204012158p:plain

この2つ目がなんでか「はい」になってました。

そりゃ出てくるわけないわ(*'ω'*)

 

ここ直して...(*'ω'*)

ビルドし直して...(*'ω'*)

インストールすれば、ほーら(*'ω'*)

 

ほーら...(*'ω'*)

 

...(*'ω'*)

 

......(*゜ω゜*)

 

.........…(゜ω゜)

 

...………直ってない(゜д゜;)!!??

 

 

多分、普通に寝ぼけて設定変えただけ、っていうのなら上記の内容で直るみたいですが、

今回の件はそれとは関係なかったみたいです。

実際の原因はインストール対象のドライバのinfを変えたことにあったみたいです。

 

ユニバーサルドライバ対応にあたって、以下の記述を消す必要があって、

とりあえずコメントアウトしてた結果、

プログラムの追加と削除に出なくなってたみたいでした。

 

---------  driver.inf  ----------------------

[driver_Uninst_Reg]
;HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\PiyoDriver, "UninstallString",,"%10%\uninst.exe"
;HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\PiyoDriver, "DisplayName",,"Driver pro"
;HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\PiyoDriver, "Publisher",%REG_SZ%,%Publisher%
;HKLM,Software\Microsoft\Windows\CurrentVersion\Uninstall\PiyoDriver, "DisplayVersion",%REG_SZ%,%DriverVersion%

---------------------------------------------------------

 

ユニバーサル対応も大変だ...



 
 

【C++】マニフェストファイルの対応OS記載について【インストーラ】

InstallShieldにて、OSによってインストールするドライバを変える処理をInstall Script内で行っていました。

10対応で、10のみ新しいドライバをインストールする!
ってなった時になんだかうまく動かなかったのでメモ。

 

Install Scriptはこんな感じ

////////////////////////////////////////////////////////////////////////

File Name: Setup.rul
//////////////////////////////////////////////////////////////////////
  ~~色々
   // Windows 7/8/8.1
 if ((SYSINFO.nWinMajor = 6) && ((SYSINFO.nWinMinor = 1) || (SYSINFO.nWinMinor = 2) || (SYSINFO.nWinMinor = 3))) then
             //インストール処理;
 elseif(SYSINFO.nWinMajor = 10) then
            // 10用インストール処理
    else
            //その他ドライバインストール処理
    endif;
//////////////////////////////////////////////////////////////////////

 

どう頑張っても、10のドライバがインストールされない。
条件文は合っているはずなのに。。。

調べたらこういうことらしい
「アプリケーションマニフェストのSupportOSで明示的な宣言をしないと、取得するOSのバージョンがマニフェストに記載された最大値になる」


参考:Win10: OS のバージョン | re-Think things

 

 

InstallShield用のScriptは中でGetVersionEx()呼んでるかな。
バージョン表示処理を入れたら、案の定Windows10環境で"6.2"と表示されていました。

 

今回のインストーラが埋め込むマニフェスト"SetupExe.Highest.manifest
"のcompatibilityセクションを以下に書き換えて対応。

 

マニフェストファイルを探すのに手間取ったので、一応メモ
C:\Program Files (x86)\InstallShield\2013\Support\SetupExe.Highest.manifest)

 

/////////////////////////////////////////////////////////////////////////////////////////

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!– Windows 10 –>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
<!– Windows 8.1 –>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!– Windows 8 –>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!– Windows 7 –>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!– Windows Vista –>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>

/////////////////////////////////////////////////////////////////////////////////////////////////////

 

再度ビルドして試したら無事動きました(*'ω'*)

 

これ前回までは7~8.1までOS分けてなかったからよかったけど、
うっかり分けてたらバグってたのかも。

よかったよかった。

 

電子工作 作るものリスト(ほぼ自分用メモ)

最近納期が重なってなかなかプライベートが充実できなかったです(´・ω・`)

やっと生活が落ち着いてきて、チビと全力で遊んでいたら作らなきゃいけないものが出てきた。

⑴自動TVオフ機
⑵泣き声監視モニター
⑶逃げるお菓子箱


⑴自動TVオフ機
【背景】
アンパンマンに興味を持ったチビが、アニメを流すとTVのゼロ距離視聴をする。
目が悪くなってまう!
離してもダッシュで近づくから体に覚えさせねば!
【要件】
TVに1.5m以上人が近付くとオフ。
離れるとオン。
【色々】
人感センサー。アウトプット:赤外線LEDでTV。
テレビonoff信号解析の為に赤外線レシーバーも。


(2)泣き声監視モニター
【背景】
別の部屋に寝かせて作業してた時に泣かれるとすぐ気付けない。
でも5分くらいで自分で泣き止む時もある。
泣いた時にすぐ分かって監視できるものがあれば……。
【要件】
一定以上の音量で泣いたら映像on
【色々】
音量センサー?カメラ?


(3)逃げるお菓子箱
【背景】
お菓子の美味さを覚えた!
高い所に隠しても台を持ってきたり棒で落としたりして取られる。
お菓子箱が逃げればいいんじゃないか!?
【要件】
逃げる
【色々】
レベル1:後ろに下がる
レベル2:後ろに壁を検知したら横に行く
レベル3:逃げ道を見つけて正面突破する


とりあえずメモ!!!

infファイルのDriverVerエラー

提出するinfのDriverVerの部分の修正し忘れを発見。
バイスマネージャ上で古い情報が表示されるとまずいので編集。

とりあえずChkinfをかけてみると以下のエラーが。。。

DriverVer=26/09/2016,1.3.255.0
; (E22.1.1066) Bad value for Month in DriverVer.
; (E22.1.1067) DriverVer date is in the future

「DriverVer date is in the future」について調べてみたら、
ビルドする際の時間基準がUTCになっているので、+9時間の時差の間を設定してしまうとまずいらしい。
回避方法は「VSでプロジェクトを右クリック-> プロパティ -> Inf2Cat -> General -> Use Local TIme を「はい」にすればよい。」

[参考]
http://blog.livedoor.jp/cielo_cielo/archives/65844807.html
http://monoist.atmarkit.co.jp/mn/articles/1307/26/news003_3.html

なんだ簡単じゃん!!!



・・・・とか思ったのですが、

・Infの作成は直接エディタ
・そもそももう11月なので、1カ月以上昔の日付を設定してる

これUTC関係ないなぁ。



無駄に悩んだ結果、
DriverVerの書き方は
「DriverVer=MM/DD/YYYY,VERSION」
だった。

26月になってたから、「 Bad value for Month」も出てただけでした。

無駄に時間くった!

visual studioを使わずにドライバにテスト署名する

テスト署名
<ドライバテスト署名の付け方>
(1)ドライバの作成
(2).catファイルの作成
(3).catファイル署名用証明書作成
(4)証明書を信頼する
(5)作成した証明書を使用して署名

**前提**
SDKがインストールされていること


(1)ドライバの作成
 ドライバとINFを作る。
 作ったドライバとinfを同じフォルダに置いておく
   【インストールパッケージのフォルダ構成例】
 C:\InstallPackege\NEOSB.inf
 \amd64\neosb.sys
 \x86\neosb.sys
 
(2).catファイルの作成
 inf2cat.exeを使用。
 (パス:C:\Program Files (x86)\Windows Kits\10\bin\x86\inf2cat.exe)
 (自分がダウンロードしたSDKのバージョンに合わせたパスで)
 
 コマンドプロンプトでinf2catのあるフォルダに移動してから以下を実行
  inf2cat.exe /driver:[(1)で作成したフォルダ] /os:[対象テストOS]
  
  (※対象テストOSの指定の方法は以下。複数指定の場合はカンマ区切りで指定
   ------Windows のバージョン:識別子-------
Windows 8 x64 Edition:8_X64
Windows 8 x86 Edition:8_X86
Windows Server 2012 :Server8_X64
Windows Server 2008 R2 x64 Edition:Server2008R2_X64
Windows Server 2008 R2 Itanium Edition:Server2008R2_IA64
Windows 7 x64 Edition:7_X64
Windows 7 x86 Edition:7_X86
Windows Server 2008 x64 Edition:Server2008_X64
Windows Server 2008 Itanium Edition:Server2008_IA64
Windows Server 2008 x86 Edition:Server2008_X86
Windows Vista x64 Edition:Vista_X64
Windows Vista x86 Edition:Vista_X86
Windows Server 2003 x64 Edition:Server2003_X64
Windows Server 2003 Itanium Edition:Server2003_IA64
Windows Server 2003 x86 Edition:Server2003_X86
Windows XP x64 Edition:XP_X64
Windows XP x86 Edition:XP_X86
Windows 2000:2000
  
 
(3).catファイル署名用証明書作成
 inf2cat.exeと同じフォルダで以下を実行
 (以下の例では「発行先:piyopiyo CA、フォルダ名:piyoStore」として証明書を作成
  makecert /r /n “CN=piyopiyo CA” /ss “piyoStore” /sr LocalMachine
 
 証明書が出来たことを確認
  ファイル名を指定して実行で、「mmc.exe」を実行
  [ファイル]→[スナップインの追加と削除]→[証明書]を指定して[追加]。
  [コンピュータアカウント]→[ローカルコンピューター]→[完了]
  
  コンソールルート以下に「piyoStore」フォルダが表示される。
  表示された証明書を右クリック→「すべてのタスク」→「エクスポート」→.cer形式で証明書をエクスポート
  

(4)証明書を信頼する
(3)で作成した証明書を、「信頼されたルート証明機関」と「信頼された発行元」にコピー


(5)作成した証明書を使用して署名
 inf2Cat.exeと同じフォルダに移動し、以下のコマンドを実行
 SignTool.exe sign /s TrustPublisher /n [発行先名] /t http://timestamp.verisign.com/scripts/timstamp.dll [(2)で作成した.catファイルのフルパス]
 
 署名 \(^o^)/ 完了!!
 

(6)テスト準備
 テスト環境に作成した証明書(.cer)をコピー
 ダブルクリックして「信頼されたルート証明機関」と「信頼された発行元」に登録
 

【C/C++】引数ありコンストラクタの呼び出し

 

MFCアプリで、引数呼びしたのをダイアログの方に渡したかった。

-------AppDlg.cpp-----------------------
//(色々略)
CAppDlg::CAppDlg(const CString FilePath, CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_APP_DIALOG, pParent)
, m_FilePath(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_FilePath = FilePath;
}

void CAppDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_PATH_EDIT, m_FilePath);
}


-------AppDlg.h-------------------------
class CAppDlg : public CDialogEx
{
// コンストラクション
public:
CAppDlg(const CString FilePath, const CString OriginalFilePath, CWnd* pParent = nullptr);

// ダイアログ データ
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_App_DIALOG };
#endif

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート

// 実装(略)
private:
CString m_FilePath;
};

 

-------App.cpp-------------------------
CAppDlg dlg(__targv[0], __targv[2]);
m_pMainWnd = &dlg;
dlg.DoModal();

-------------------------------------------

 

オーバーライドって便利\(^o^)/

カーネルデバッグのやり方

ドライバのデバッグやらに。

今回は1394による接続。
通称座薬さん(´∀`)

☆用意するもの☆
◎HostPC
WinDBG
1394のケーブルとポート

◎ClientPC
なんかデバッグしたい環境


1.Client環境の準備
コマンドプロンプトで以下のコマンドを実行
bcdedit /dbgsettings 1394 CHANNEL:20
レジストリに以下を登録(なくても動くけど)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
 DEFAULT REG_DWORD 0xffffffff
・1394ケーブルを接続


2.Host環境の準備
WinDbgを起動
「Kernel Debug」を選択して、1394タブを選択。

Channelに20を設定してOK


繋がらない場合はClient側再起動と、デバッグモードで起動してるかの確認。

breakしてみてマウスカーソルが動かなくなったら繋がってる!!