How do I register a file type as part of my InstallShield Express Professional installation?

Posted on 1998-09-13
Last Modified: 2013-11-14
I have written a program in VB 4 which allows the creation and editing of .rev files which are unique to my program.  I'm using InstallShield Express Professional V. 1.11a (*NOT* the setup program that comes with VB) to create the setup which provides the install/uninstall facilities for my end users.

What I want to do is make the InstallShield Express Professional setup program (*NOT* the actual program I have wrote) automatically register/unregister the .rev type, so that when a .rev file is viewed in Explorer etc., it appears as an icon I have specified.  Double clicking a .rev file should then automatically launch my program so the file can be edited, just like clicking on a .txt file will launch Notepad..

Thanks for your help.
Question by:Richard2000

Accepted Solution

dirtdart earned 50 total points
ID: 1434620
Simply tell installshield to add registry entries to resemble the following:

   .rev                      Default - "RevFile"
      DefaultIcon            Default - "c:\mypath\MyFile.exe,0"
            command          Default - "c:\mypath\MyFile.exe"

That will cause windows to recognize your extension and start your program when it is double clicked.

LVL 14

Expert Comment

ID: 1434621
Use this code to register your file extension :

Option Explicit

Private Const REG_SZ As Long = 1
Private Const REG_DWORD As Long = 4
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_USERS = &H80000003

Private Const ERROR_NONE = 0
Private Const ERROR_BADDB = 1
Private Const ERROR_BADKEY = 2
Private Const ERROR_CANTOPEN = 3
Private Const ERROR_CANTREAD = 4
Private Const ERROR_CANTWRITE = 5
Private Const ERROR_NO_MORE_ITEMS = 259

Private Const KEY_ALL_ACCESS = &H3F

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long

Public Sub CreateAssociation(sExtension As String, sAppName As String, sFilePath As String)

   Dim sPath As String

   'File Associations begin with a listing
   'of the default extension under HKEY_CLASSES_ROOT.
   'So the first step is to create that
   'root extension item
   CreateNewKey "." & sExtension, HKEY_CLASSES_ROOT

   'To the extension just added, add a
   'subitem where the registry will look for
   'commands relating to the .xxx extension
   '("MyApp.Document"). Its type is String (REG_SZ)
   SetKeyValue "." & sExtension, "", sAppName & ".Document", REG_SZ

   'Create the 'MyApp.Document' item under
   'HKEY_CLASSES_ROOT. This is where you'll put
   'the command line to execute or other shell
   'statements necessary.
   CreateNewKey sAppName & ".Document\shell\open\command", HKEY_CLASSES_ROOT

   'Set its default item to "MyApp Document".
   'This is what is displayed in Explorer against
   'for files with a xxx extension. Its type is
   'String (REG_SZ)
   SetKeyValue sAppName & ".Document", "", sAppName & " Document", REG_SZ

   'Finally, add the path to myapp.exe
   'Remember to add %1 as the final command
   'parameter to assure the app opens the passed
   'command line item.
   '(results in '"c:\LongPathname\Myapp.exe %1")
   'Again, its type is string.
   sPath = sFilePath & " %1"
   SetKeyValue sAppName & ".Document\shell\open\command", "", sPath, REG_SZ

End Sub

Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long

   Dim nValue As Long
   Dim sValue As String

   Select Case lType
      Case REG_SZ
         sValue = vValue & Chr$(0)
         SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))

      Case REG_DWORD
         nValue = vValue
         SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, nValue, 4)

   End Select

End Function

Public Sub CreateNewKey(sNewKeyName As String, lPredefinedKey As Long)

   'handle to the new key
   Dim hKey As Long

   'result of the RegCreateKeyEx function
   Dim r As Long

   r = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hKey, r)

   Call RegCloseKey(hKey)

End Sub

Public Sub SetKeyValue(sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)

   'result of the SetValueEx function
   Dim r As Long

   'handle of opened key
   Dim hKey As Long

   'open the specified key
   r = RegOpenKeyEx(HKEY_CLASSES_ROOT, sKeyName, 0, KEY_ALL_ACCESS, hKey)

   r = SetValueEx(hKey, sValueName, lValueType, vValueSetting)

   Call RegCloseKey(hKey)

End Sub


Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

I’ve seen a number of people looking for examples of how to access web services from VB6.  I’ve been using a test harness I built in VB6 (using many resources I found online) that I use for small projects to work out how to communicate with web serv…
Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now