VBSでできるんだからVBAでできるだろうと。
access2010のパッケージソリューションウィザードで出力したインストールファイルは、ちょっとダメな子で、信頼できる場所に関するレジストリが2007仕様になっている。そこで、ウィザード中に正確な追加レジストリを設定してあげると問題なくインストールに使用できるのだけど、もともと生成されているレジストリ情報はそのままだからそれを更新してしまおうという魂胆。ウィザード設定ファイルに残るわけではないから、ちゃちゃっとすませたいときにでも使おうかな。
14.0 であるべきなのに 12.0 になってる。これを更新する。
Const msiOpenDatabaseModeReadOnly = 0
Const msiOpenDatabaseModeTransact = 1
Const msiViewModifyInsert = 1
Const msiViewModifyUpdate = 2
Const msiViewModifyDelete = 6
Sub Correct12to14(msiFullPath As String)
Dim Installer As Object, _
msiDB As Object, msiQuery As String, _
msiView As Object, msiRecord As Object
Set Installer = CreateObject("WindowsInstaller.Installer")
Set msiDB = Installer.OpenDatabase(msiFullPath, _
msiOpenDatabaseModeTransact)
msiQuery = "SELECT * FROM Registry WHERE Registry = 'TrustedLocationReg'"
Set msiView = msiDB.OpenView(msiQuery)
msiView.Execute
Set msiRecord = msiView.Fetch
msiRecord.StringData(3) = Replace(msiRecord.StringData(3), _
"12.0", _
"14.0")
msiView.Modify msiViewModifyUpdate, msiRecord
msiDB.Commit
End Sub
これで 14.0 access2010用になる。なんども試してはいなけど。
ちょっとおまけ的なところで、ダイアログを調整。
Sub HideCustomControls(msiFullPath As String)
Dim Installer As Object, _
msiDB As Object, msiQuery As String, _
msiView As Object, msiRecord As Object
Set Installer = CreateObject("WindowsInstaller.Installer")
Set msiDB = Installer.OpenDatabase(msiFullPath, _
msiOpenDatabaseModeTransact)
msiQuery = "SELECT Attributes FROM Control " & _
"WHERE Dialog_ ='SetupTypeDlg' AND (" & _
"Control = 'CustomButton' OR " & _
"Control='CustomLabel' OR " & _
"Control='CustomText')"
Set msiView = msiDB.OpenView(msiQuery)
msiView.Execute
Do
Set msiRecord = msiView.Fetch
If msiRecord Is Nothing Then Exit Do
msiRecord.StringData(1) = "0"
msiView.Modify msiViewModifyUpdate, msiRecord
Loop
msiDB.Commit
End Sub
一部消してみた
その他まとめはこっち。
0 件のコメント:
コメントを投稿