Создание инсталлятора
Сведения о Inno Setup
Для создания инсталлятора воспользовался бесплатной программой Inno Setup
Inno Setup - Эта программа представляет собой многофункциональный инструмент для создания исполняемых (ЕХЕ) файлов, имеющий в своем арсенале множество полезных функций. Например, при создании нового дистрибутива поможет специальный "мастер" (wizard), а в процессе вы можете настроить множество различных параметров. Кроме этого, Inno Setup позволяет определить все записи в файлах системного реестра и инициализации, выбрать, будет ли программа автоматически загружаться с запуском операционной системы и добавлять свою пиктограмму в меню "Пуск", а также оснащает каждый дистрибутив системой корректного удаления из системы.
Поэтапное создание инсталлятора
После запуска программы, видим начальное окно, где предлагается создать скрипт. Ставим галочку на пункте «Создать новый файл сценария с помощью мастера» (Рисунок 5).
Рисунок 5. Начальное окно программы
На следующем этапе создания инсталлятора нам предлагают ввести имя будущего приложения (Рисунок 6).
Рисунок 6. Информация о приложении
На следующем этапе необходимо указать файлы приложения (Рисунок 7).
Рисунок 7. Файлы приложения
На следующем этапе необходимо указать место создания иконок для приложения (Рисунок 8).
Рисунок 8. Иконки приложения
Далее необходимо указать файл лицензии и файлы с информацией до и после установки. (Рисунок 9).
Рисунок 9. Документация приложения
Далее необходимо выбрать языки, которые будут добавлены к установке приложения (Рисунок 10).
Рисунок 10. Выбор языка
На следующем этапе необходимо указать основные параметры компилятора (Рисунок 11).
Рисунок 11. Параметры компилятора
После указания всех настроек программа предложит выполнить скрипт (Рисунок 12), нажимаем да и все инсталлятор готов.
Рисунок 12. Окно с запуском скрипта
Исходный код приложения
PictureDispConverter
Imports System.Runtime.InteropServices
Public NotInheritable Class PictureDispConverter
<DllImport("OleAut32.dll", _
EntryPoint:="OleCreatePictureIndirect", _
ExactSpelling:=True, _
PreserveSig:=False)> _
Private Shared Function OleCreatePictureIndirect( _
<MarshalAs(UnmanagedType.AsAny)> _
ByVal picdesc As Object, _
ByRef iid As Guid, _
<MarshalAs(UnmanagedType.Bool)> _
ByVal fOwn As Boolean) _
As stdole.IPictureDisp
End Function
Shared iPictureDispGuid As Guid = _
GetType(stdole.IPictureDisp).GUID
Private NotInheritable Class PICTDESC
Private Sub New()
End Sub
Public Const PICTYPE_UNINITIALIZED As Short = -1
Public Const PICTYPE_NONE As Short = 0
Public Const PICTYPE_BITMAP As Short = 1
Public Const PICTYPE_METAFILE As Short = 2
Public Const PICTYPE_ICON As Short = 3
Public Const PICTYPE_ENHMETAFILE As Short = 4
<StructLayout(LayoutKind.Sequential)> _
Public Class Icon
Friend cbSizeOfStruct As Integer = _
Marshal.SizeOf(GetType(PICTDESC.Icon))
Friend picType As Integer = _
PICTDESC.PICTYPE_ICON
Friend hicon As IntPtr = IntPtr.Zero
Friend unused1 As Integer
Friend unused2 As Integer
Friend Sub New(ByVal icon As _
System.Drawing.Icon)
Me.hicon = icon.ToBitmap().GetHicon()
End Sub
End Class
<StructLayout(LayoutKind.Sequential)> _
Public Class Bitmap
Friend cbSizeOfStruct As Integer = _
Marshal.SizeOf(GetType(PICTDESC.Bitmap))
Friend picType As Integer = _
PICTDESC.PICTYPE_BITMAP
Friend hbitmap As IntPtr = IntPtr.Zero
Friend hpal As IntPtr = IntPtr.Zero
Friend unused As Integer
Friend Sub New(ByVal bitmap As _
System.Drawing.Bitmap)
Me.hbitmap = bitmap.GetHbitmap()
End Sub
End Class
End Class
Public Shared Function ToIPictureDisp( _
ByVal icon As System.Drawing.Icon) _
As stdole.IPictureDisp
Dim pictIcon As New PICTDESC.Icon(icon)
Return OleCreatePictureIndirect(pictIcon, _
iPictureDispGuid, True)
End Function
Public Shared Function ToIPictureDisp( _
ByVal bmp As System.Drawing.Bitmap) _
As stdole.IPictureDisp
Dim pictBmp As New PICTDESC.Bitmap(bmp)
Return OleCreatePictureIndirect(pictBmp, _
iPictureDispGuid, True)
End Function
End Class
StandardAddInServer
Imports Inventor
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Namespace HelloWorldAddIn_VB
<ProgIdAttribute("HelloWorldAddIn_VB.StandardAddInServer"), _
GuidAttribute("82ed13f7-bdb1-4685-840e-6fcc84a0f84c")> _
Public Class StandardAddInServer
Implements Inventor.ApplicationAddInServer
Public m_inventorApplication As Inventor.Application
Private mAsmButtonDef As ButtonDefinition
Private mPartButtonDef As ButtonDefinition
Private Const strAddInGuid As String = "b22d0530-5e1f-426d-9a76-5b383def94fa"
#Region "ApplicationAddInServer Members"
Public Sub Activate(ByVal addInSiteObject As Inventor.ApplicationAddInSite, ByVal firstTime As Boolean) Implements Inventor.ApplicationAddInServer.Activate
m_inventorApplication = addInSiteObject.Application
Dim oCtrlDefs As ControlDefinitions _
= m_inventorApplication.CommandManager.ControlDefinitions
Dim oIPictureDisp As Object = PictureDispConverter _
.ToIPictureDisp(My.Resources.Icon)
mAsmButtonDef = oCtrlDefs.AddButtonDefinition( _
"Включение/выключение видимости", _
"Autodesk:RibbonVBTest:Button1", _
CommandTypesEnum.kQueryOnlyCmdType, _
strAddInGuid, _
"Описание", _
"Изменить видимость в сечении", _
oIPictureDisp, _
oIPictureDisp, _
ButtonDisplayEnum.kDisplayTextInLearningMode)
If (firstTime) Then
Dim UIManager As UserInterfaceManager _
= m_inventorApplication.UserInterfaceManager
Dim assemblyRibbon As Inventor.Ribbon _
= UIManager.Ribbons.Item("Assembly")
Dim assemblyTab As Inventor.RibbonTab _
= assemblyRibbon.RibbonTabs.Item("id_TabAssemble")
Dim panel1 As Inventor.RibbonPanel _
= assemblyTab.RibbonPanels.Add( _
"Работа с сечением", _
"Autodesk:RibbonVBTest:Panel1", _
strAddInGuid)
panel1.CommandControls.AddButton(mAsmButtonDef, True)
End If
AddHandler mAsmButtonDef.OnExecute, AddressOf Me.mAsmButtonDef_OnExecute
End Sub
#Region "Event handlers"
Private Sub mAsmButtonDef_OnExecute(ByVal Context As Inventor.NameValueMap)
Dim Assem As AssemblyDocument
Dim PartD As PartDocument
Dim oModelSettings As ModelingSettings
Assem = m_inventorApplication.ActiveDocument
If Assem.SelectSet.Count = 0 Then
MsgBox("Выберите деталь")
Return
End If
Try
Dim selec As SelectSet
selec = Assem.SelectSet
Dim detal As ComponentOccurrence = Nothing
For Each obj As Object In selec
detal = obj
PartD = detal.Definition.Document
oModelSettings = PartD.ModelingSettings
If oModelSettings.AllowSectioningThruPart = True Then
oModelSettings.AllowSectioningThruPart = False
ElseIf oModelSettings.AllowSectioningThruPart = False Then
oModelSettings.AllowSectioningThruPart = True
End If
Next
Catch
End Try
MsgBox("Видимость изменена")
End Sub
#End Region
Public Sub Deactivate() Implements Inventor.ApplicationAddInServer.Deactivate
Marshal.ReleaseComObject(m_inventorApplication)
m_inventorApplication = Nothing
System.GC.WaitForPendingFinalizers()
System.GC.Collect()
End Sub
Public ReadOnly Property Automation() As Object Implements Inventor.ApplicationAddInServer.Automation
Get
Return Nothing
End Get
End Property
Public Sub ExecuteCommand(ByVal commandID As Integer) Implements Inventor.ApplicationAddInServer.ExecuteCommand
End Sub
#End Region
End Class
End Namespace
