見出し画像

TWSNMP FC:Windows版のインストーラーを作成するスクリプトができた

昨日の夜、Windowsのインストーラーを作ろうと思って作業を開始しました。でもWix Toolsetでインストーラーを作ったのが随分前なので、すっかりXMLのソースコードの書き方を忘れていました。

を読んで思い出そうとしましたが、夜なので頭が働かず、何書いてあるか理解不能でした。諦めて寝ることにしました。
今朝は、5時に起きて再チャンレンジしました。朝だとちゃんと理解できて2時間かけてインストーラー用のXMLを作成できました。作ったXMLは

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 <Product Name="TWSNMP FC"  
         Manufacturer="Masayuki Yamai"
         Id="2df8ed1d-837a-4147-b51f-6097eac0c606"
         UpgradeCode="a505ec12-cb9c-4fe9-86e5-47f8ba3e358e"
         Language='1041' Codepage='932'
         Version="1.15.0">
   <Package Id='*' Keywords='Installer'  
     Description="TWSNMP FC 1.15.0" 
     Comments="TWSNMP FC"
     Languages='1041' SummaryCodepage='932'
     InstallerVersion="100" Compressed="yes" />
   <Media Id="1" Cabinet="twsnmpfc.cab" EmbedCab="yes" />
   <Directory Id="TARGETDIR" Name="SourceDir">
     <Directory Id="ProgramFilesFolder" Name="PFiles">
       <Directory Id="TWSNMPFC" Name="TWSNMPFC">
         <Component Id="MainExecutable" 
           Guid="5928420f-f8c0-47bb-bcaa-5c590b69412d">
           <File Id="twsnmpfc.exe" 
                 Name="twsnmpfc.exe"
                 DiskId='1'
                 Source="Z:\windows\bin\twsnmpfc.exe">
           </File>
           <File Id="twpcap.exe" 
                 Name="twpcap.exe"
                 DiskId='1'
                 Source="Z:\windows\bin/twpcap.exe">
           </File>
           <File Id="twWifiScan.exe" 
                 Name="twWifiScan.exe"
                 DiskId='1'
                 Source="Z:\windows\bin/twWifiScan.exe">
           </File>
           <File Id="twWinlog.exe" 
                 Name="twWinlog.exe"
                 DiskId='1'
                 Source="Z:\windows\bin/twWinlog.exe">
           </File>
           <File Id="README.txt" 
                 Name="README.txt"
                 DiskId='1' KeyPath='yes'
                 Source="Z:\windows\README.txt">
             <Shortcut Id="ReadmeShortcut" Directory="ProgramMenuDir" 
               Name="TWSNMP FCについて" Advertise="yes" Icon="twsnmpfc.ico" IconIndex="0"/>
           </File>
         </Component>
       </Directory>
     </Directory>
     <Directory Id="ProgramMenuFolder">
       <Directory Id="ProgramMenuDir" Name="TWSNMP FC">
         <Component Id="StartMenuShortcuts" Guid="9904b04c-4add-4776-a889-326476f1143a">
             <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
             <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
         </Component>
         </Directory>
     </Directory>
   </Directory>
   <Feature Id="DefaultFeature" Title="Main Feature" Level="1">
     <ComponentRef Id="MainExecutable" />
     <ComponentRef Id="StartMenuShortcuts" />
   </Feature>
   <UI />
   <UIRef Id="WixUI_Minimal" />
   <Icon Id="twsnmpfc.ico" SourceFile="Z:\windows\twsnmpfc.ico" />
   <WixVariable Id="WixUILicenseRtf" Value="Z:\windows\lic.rtf" />
   <WixVariable Id="WixUIBannerBmp" Value="Z:\windows\Banner.bmp" />
   <WixVariable Id="WixUIDialogBmp" Value="Z:\windows\Dialog.bmp" />
 </Product>
</Wix>

インストーラーの作成は少し悩みましたが、シンプルに

・TWSNMP FC本体とセンサープログラムをプログラムフォルダにコピー
・起動するための説明を表示するメニューだけをプログラムメニューに表示
・アンインストールできるようにする
・実行ファイルとインストーラーの署名は復刻版と同じものを利用

にしました。

インストーラーの作成のMakeFileはMac OS側でファイルをコピーしてWindowsマシンでビルドする方法にしました。そのうちDocker+Wineでできるようになったらコマンド一発で作成できるようにしたいですが、今はこの方法にしておきます。この方法のMakefileは

windows: dist/twsnmpfc.msi

dist/twsnmpfc.msi: windows/twsnmpfc.msi
	cp windows/twsnmpfc.msi dist/twsnmpfc.msi

windows/twsnmpfc.msi: $(WINSRC)
	@echo "Windowsでmkinst.batを実行してください"
	@exit 1

windows/bin/twsnmpfc.exe: ../twsnmpfc/dist/twsnmpfc.exe
	cp ../twsnmpfc/dist/twsnmpfc.exe windows/bin/

のような感じです。

% make windows
cp ../twsnmpfc/dist/twsnmpfc.exe windows/bin/
cp ../twWifiScan/dist/twWifiScan.exe windows/bin/
cp ../twpcap/dist/twpcap.exe windows/bin/
cp ../twWinlog/dist/twWinlog.exe windows/bin/
Windowsでmkinst.batを実行してください
make: *** [windows/twsnmpfc.msi] Error 1

※ここでWindowsマシンでmkinst.batを実行します。

% make windows
cp windows/twsnmpfc.msi dist/twsnmpfc.msi

% make windows
make: Nothing to be done for `windows'.

のような感じで、実行ファイルを最新の状態でインストーラーが作成できるよういなりました。
説明ファイルやアイコンの表示とか修正するところはありますが、今日は時間切れです。

明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。