cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Singaravelan
Level 4

Help for adapting the code for VB 2008

Hello All,

I need some help. We are using the VB scripts provided by Robert Dickau sometime back for modifying the script numbering in the SQL Script list. We were using vb6 and are now trying to utlise vb2008 for the same application.

I am enclosing the part of the script here below. Of course it does not work as such. With my limited VB knowledge, I could not convert it. Is there anyone using the same method for modifying data on the ISM file and if yes, would you be kind enough to share the code for VB 2008 or Express?

Thanks in advance.
Velan

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
Dim oRec As Object
Dim i As Object
Dim oView As Object
Dim oDB As Object
Dim oMSI As Object

oMSI = CreateObject("WindowsInstaller.Installer")


' open ISM file in transacted mode
'Set oDB = oMSI.OpenDatabase("C:\InstallShield Projects\Our_Package.ism", 1)
'UPGRADE_WARNING: Couldn't resolve default property of object oMSI.OpenDatabase. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
oDB = oMSI.OpenDatabase("Y:\Installshield Projects\Our_project.ism", 1)

' fetch the one and only samplesource record
'Set oView = oDB.OpenView("select `ISSQLScriptFile`.`InstallText`, `ISSQLConnectionScript`.`Order` from `ISSQLScriptFile`, `ISSQLConnectionScript` where `ISSQLConnectionScript`.`ISSQLScriptFile_` = `ISSQLScriptFile`.`ISSQLScriptFile` ORDER BY `ISSQLConnectionScript`.`Order`") ' = '_1.35.0780002582'")
'UPGRADE_WARNING: Couldn't resolve default property of object oDB.OpenView. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
oView = oDB.OpenView("select `ISSQLScriptFile`.`Version` from `ISSQLScriptFile`, `ISSQLConnectionScript` where `ISSQLConnectionScript`.`ISSQLScriptFile_` = `ISSQLScriptFile`.`ISSQLScriptFile` ORDER BY `ISSQLConnectionScript`.`Order`") ' = '_1.35.0780002582'")
'"Update `ISSQLSCriptFile` Set `ISSQLSCriptFile`.`ISSQLSCriptFile` = 'Processing SQL Script (out of max 250):' + Order From `ISSQLSCriptFile`, `ISSQLConnectionScript` Where `ISSQLConnectionScript`.`ISSQLSCriptFile_` = `ISSQLSCriptFile`.`ISSQLSCriptFile`")
'"update `ISSQLScriptFile` set `InstallText` = 'ISSQLScriptFile'")
'UPGRADE_WARNING: Couldn't resolve default property of object oView.Execute. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
oView.Execute()
Labels (1)
0 Kudos
9 Replies
gknierim
Level 6

What exactly are you trying to do with your old VBScript? Chances are that there are better ways to accomplish the task without using the old VBScript. Please provide more detail.
0 Kudos
Singaravelan
Level 4

Hi

I am trying to number the SQL scripts that we are including into the Installshield. Installshield does not do it internally and hence I am doing with an external tool.

I discussed in this forum about 5 years ago and the solution was suggested by Robert. Perhaps you are right.

http://www.installshield.com/news/newsletter/0203-articles/DEVtip.pdf

Now I need to upgrade this code into the latest VB and if you could provide any pointers, it would be really helpful.

Thanks and Best Regards,
Velan
0 Kudos
gknierim
Level 6

I would try looking at something like this instead of CreateObject:

Dim oMSI As Object = Activator.CreateInstance("WindowsInstaller.Installer")

How many SQL Scripts do you have and why are you numbering them? Just trying to figure out why you have an external tool to do this.
0 Kudos
Singaravelan
Level 4

Thanks for your suggestion. I will try and get back.

To explain: We have around 1500 sql scripts for each deployment. We need to number them and this number helps us to keep the track of it, for ISSCHEMA of Installshield/MS engine to ensure deploying the scripts only once during its application.

Hope this helps to understand better.

Best Regards,
Velan
0 Kudos
Singaravelan
Level 4

Hi

I tried the dim statement but getting the following error. Do you have any idea?

Thanks
Velan

Error 1 Overload resolution failed because no accessible 'CreateInstance' can be called with these arguments:
'Public Shared Function CreateInstance(activationContext As System.ActivationContext) As System.Runtime.Remoting.ObjectHandle': Value of type 'String' cannot be converted to 'System.ActivationContext'.
'Public Shared Function CreateInstance(type As System.Type) As Object': Value of type 'String' cannot be converted to 'System.Type'. R:\Project1.NET1\frmDocument.vb 13 30 Project1
0 Kudos
gknierim
Level 6

Here's something that should get you started.

First, add a reference to the Msi.dll which can found in your Windows\System32 folder. After adding it, you should see WindowsInstaller under References of your project (assumming this is a Windows Forms project).

Then, use the following code:
Dim oMSI As WindowsInstaller.Installer
Dim oDB As WindowsInstaller.Database
Dim oView As WindowsInstaller.View
Dim oType As Type

Try
oType = Type.GetTypeFromProgID("WindowsInstaller.Installer")
oMSI = CType(Activator.CreateInstance(oType), WindowsInstaller.Installer)
oDB = oMSI.OpenDatabase("C:\InstallShield Projects\Our_Package.ism", OpenMode.Output)
oView = oDB.OpenView("Select InstallText From ISSQLScriptFile")

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try


Let me know how that works. Of course, you'll have to use your own query but this should get you started.

Thanks,
Greg
0 Kudos
Christopher_Pai
Level 16

If you are using WindowsInstaller.Installer to update your ISM that means you are storing your project in Binary format and not XML format. That's not a very good choice in terms of fully utilizing your source control system to it's fullest ability. You do you source control and continous integration, right?

The InstallShield COM Automation Interface has the ability to manipulate sql connections and scripts. In the event it doesn't do what you want you can use an XML Dom to update the ISM or you can use the automation interface to convert the XML back to Binary format so that you can use the MSI API to update the tables directly yet still get the benefit of storing XML in source control.

I have extensive experience creating custom build automation infrastructure for these types of situations in case you'd like to have 1 on 1 assistance.
0 Kudos
Singaravelan
Level 4

Hello Greg,

Thanks very much for your time and help. As I was on holidays i could not test. I will be testing this tomorrow and keep you posted.

Christopher, Thanks for your offer. I am working on the next projects and will definitely take your help.

Best Regards,
Velan
0 Kudos
Singaravelan
Level 4

Hello Greg

Thanks very much for your assistance and the code.
It worked like a charm.

Once again, your inputs are greatly appreciated.

Best Regards,
Velan
0 Kudos