Skip to content

Archive

Category: Technical

 

continue reading…

This is not the Actual “Installer”. This is code needed for the Service to operate correctly.

We will get to Installing Later…

Add the Installer Code:

Create a new class file in your project and call it ProjectInstaller.

ServiceProjectInstallerStart

We wil replace the text in the ProjectInstaller class with the following code:

Version:0.9 StartHTML:0000000100 EndHTML:0000012095 StartFragment:0000000100 EndFragment:0000012095

1 Imports System.ComponentModel

2 Imports System.Configuration.Install

3

4 <RunInstaller(True)> Public Class ProjectInstaller

5 Inherits System.Configuration.Install.Installer

6 ‘Installer overrides dispose to clean up the component list.

7

8 <System.Diagnostics.DebuggerNonUserCode()> _

9 Protected Overrides Sub Dispose(ByVal disposing As Boolean)

10 Try

11 If disposing AndAlso components IsNot Nothing Then

12 components.Dispose()

13 End If

14 Finally

15 MyBase.Dispose(disposing)

16 End Try

17 End Sub

18

19 ‘Required by the Component Designer

20 Private components As System.ComponentModel.IContainer

21

22 ‘NOTE: The following procedure is required by the Component Designer

23 ‘It can be modified using the Component Designer.

24 ‘Do not modify it using the code editor.

25

26 <System.Diagnostics.DebuggerStepThrough()> _

27 Private Sub InitializeComponent()

28 Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller

29 Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller

30

31 ‘ServiceProcessInstaller1

32

33 Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem

34 Me.ServiceProcessInstaller1.Password = Nothing

35 Me.ServiceProcessInstaller1.Username = Nothing

36

37 ‘ServiceInstaller1

38

39 Me.ServiceInstaller1.ServiceName = “NewService1″

40 Me.ServiceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic

41

42 ‘ProjectInstaller

43

44 Me.Installers.AddRange(New System.Configuration.Install.Installer() _

45 {Me.ServiceProcessInstaller1, Me.ServiceInstaller1})

46 End Sub

47

48 Friend WithEvents ServiceProcessInstaller1 As _

49 System.ServiceProcess.ServiceProcessInstaller

50

51 Friend WithEvents ServiceInstaller1 As _

52 System.ServiceProcess.ServiceInstaller

53

54 Public Sub New()

55 MyBase.New()

56

57 ‘This call is required by the Component Designer.

58 InitializeComponent()

59

60 ‘Add initialization code after the call to InitializeComponent

61

62 End Sub

63 End Class

 

This will create the ProjectInstaller class and insert 2 Objects in the designer:

 

ServiceInstaller1 – Settings: The Service Name, Display Name, description, StartType

ServiceProcessInstaller – Settings: The Account the service will run under

 

In this example, the settings are set as follows:

ServiceName: NewService1

DisplayName: {blank} 
Description: {blank} 
StartType: Automatic – (will auto start on reboot) 
Account: LocalSystem – (do not need user/password. This will run under System account)

ServiceGrayInstaller

Now we have to build the project.

Services Part 3:>  Build and Install your Service

 


Visual Basic Express is a great, free tool from Microsoft.   You don’t get all that Visual Studio 2005 offers though.  One of the things VB Express does not have is templates to create a Windows Service.  

We can still make Services with VB 2005 Express.  All it takes is a little manual work.  I will walk you thru a example on how to make a service in Visual Basic Express.

 

Choose Console Application, and give it the name of NewService1.

ServiceStart

 

It will open in the designer with a module. Rename the module to NewService1.

Now we have to get some references for our Service. In the solution Explorer, double click on My Project and choose the References tab. 

We need to Add the following references: 

System.Configuration.Install 
System.ServiceProcess


Now back to the NewService1 Module. We will be replacing all the text in the module, thus turning it into a class. Replace all the text with the text below:

1 Imports System.ServiceProcess

2 Imports System.Configuration.Install

3

4 Public Class NewService1

5 Inherits System.ServiceProcess.ServiceBase

6 Friend WithEvents Timer1 As System.Timers.Timer

7

8 Public Sub New()

9 MyBase.New()

10 InitializeComponents()

11 ‘ TODO: Add any further initialization code

12 End Sub

13

14 Private Sub InitializeComponents()

15 Me.ServiceName = “NewService1″

16 Me.AutoLog = True

17 Me.CanStop = True

18 Me.Timer1 = New System.Timers.Timer()

19 Me.Timer1.Interval = 6000

20 Me.Timer1.Enabled = True

21 End Sub

22

23 ‘ This method starts the service.

24 <MTAThread()> Shared Sub Main()

25 ‘ To run more than one service you have to add them to the array

26 System.ServiceProcess.ServiceBase.Run(New System.ServiceProcess.ServiceBase() _

27 {New NewService1})

28 End Sub

29

30 ‘ Clean up any resources being used.

31 Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)

32 MyBase.Dispose(disposing)

33 ‘ TODO: Add cleanup code here (if required)

34 End Sub

35

36 Protected Overrides Sub OnStart(ByVal args() As String)

37 ‘ TODO: Add start code here (if required)

38 ‘ to start your service.

39 Me.Timer1.Enabled = True

40 End Sub

41

42 Protected Overrides Sub OnStop()

43 ‘ TODO: Add tear-down code here (if required)

44 ‘ to stop your service.

45 Me.Timer1.Enabled = False

46 End Sub

47

48 Private Sub InitializeComponent()

49 Me.Timer1 = New System.Timers.Timer

50 CType(Me.Timer1, _ System.ComponentModel.ISupportInitialize).BeginInit()

51

52 ‘Timer1

53

54 Me.Timer1.Enabled = True

55 CType(Me.Timer1, System.ComponentModel.ISupportInitialize).EndInit()

56 End Sub

57

58 Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As _ System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed

59 Dim MyLog As New EventLog() ‘ create a new event log

60 ‘ Check if the the Event Log Exists

61 If Not MyLog.SourceExists(“NewService1″) Then

62 MyLog.CreateEventSource(“NewService1″, “NewService1 Log”) ‘ Create Log

63 End If

64 MyLog.Source = “NewService1″

65 MyLog.WriteEntry(“NewService1 Log”, “It is running”, EventLogEntryType.Information)

66

67 ‘disable the timer so you dont fill up the log

68 Timer1.Enabled = False

69 End Sub

70

71 End Class

72


This will create the NewService class and insert a Timer into your designer. 
If you Double-Click on the NewService1 in the SolutionExplorer, you will see the designer and the Timer1 object. 

This code will run after 6 seconds has passed, and will insert a log entry for our service saying “ It is running”. 

We need to set the Service Name in the Designer: 

Double click on NewService1 to get the gray page. Then click somewhere in the grey to get the properties for this class. 

Under ServiceName put NewService1.

ServiceGrayTimer

 

Services Part 2:>  Creating the needed Installers

 

For more information about LAMA servers, checkout:
LAMA – Best of ALL worlds tutorial

 

Precompiling Asp.net Web Projects
Visual Web Developer – Microsoft’s free version of Visual Studio, is a great tool to create quality Asp.net Sites.  VWD being free- does not include all the tools that Visual Studio does. In this case VWD does not include the option to precompile your web project.

Why Precompile?
Well – there are a couple reasons.  First, to remove all code in your project and place it in compiled DLL’s.

This may be a good option for those who host on a shared server.  That way your code is not placed in plain text on the server for others to see.

Next, to save server resources.  The first hit on the Asp.net server is when the Asp.net project is compiled.  If you precompile, then it saves those resources by not having to compile on the server.

Lastly, Mono’s vb compiler for Linux is a few steps behind the C# compiler.
If you have a LAMA server,  and like to use VB as your language.  You can precompile your site to ensure that it will work correctly.

Use The DoTheWeb.net Asp.net Precompiling tool!
You can use this handy GUI to precompile your websites.  DoTheWeb.net Asp.net Precompiler

NOTE: This is a ClickOnce Program, you may have to use Internet Explorer or Firefox to open it from the website.

This is part of the LAMA – Best of all worlds tutorial
LAMA Tutorial Home Page

 

MySql Test Site with Visual Web Developer 2005

1.) Lets open up VWD, and create a new website called mysql-test-site

2.) Add the Mysql Connector/Net to the references.
Right click on the website name in Solution explorer, and choose Add Reference.

Select the MySql.Data from the list, and choose OK.

3.) Add a Data Grid View to the page.
In the Toolbox under Data, Select Grid View and drag it out onto the blank page.

4.) Your Code behind file should have the following code in it:

Imports System.Data

Imports MySql.Data.MySqlClient

Partial Class _Default

Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As ObjectByValAs System.EventArgs) HandlesMe.Load

‘The MySql Connection String:  replace IP address with the IP address of your LAMA server

Dim Conn As NewMySqlConnection(“server=192.168.1.37,database=testsite,Uid=aspnet,Pwd=aspnetpassword”)

Dim sSql As String = _

“Select * from phonebook”

Dim DA As New MySqlDataAdapter(sSql, Conn)

Dim DT As New DataTable

DA.Fill(DT)

Me.GridView1.DataSource = DT ’set the datagrid to the datatable

Me.DataBind()

End Sub

End Class

 

5.) Run the project in VWD to make sure it works.  You should see a datagrid with our test data in it.

If you see John Doe, then its time to copy your project into your asp_net share and setup a test site for it.

Follow the instructions in the tutorial for copying and setting up the Asp.net site.

VB.net users: Make sure to precompile your sites before copying them to the LAMA server.

Tutorial – Configure Apache for Asp.net Site


Precompiling your Visual Web Developer Sites