PC Review


Reply
Thread Tools Rate Thread

Automatically update Winows .NET Service

 
 
Peter
Guest
Posts: n/a
 
      31st Oct 2008
Is there a way to automatically update a Windows .NET service, kind of like
Click-Once or put a file in the directory and the service would restart it's
self and replace the executables or at least replace its DLLs without
restarting? I know it's posible, (anything is posible) but is there
anything already in place?

Thank You


Peter





 
Reply With Quote
 
 
 
 
\Ji Zhou [MSFT]\
Guest
Posts: n/a
 
      3rd Nov 2008
Hello Peter,

Actually, from the MSDN document
http://msdn.microsoft.com/en-us/library/ms973805.aspx, we can see that the
ClickOnce does not support installing the .Net Windows Services. We have to
implement the self update logical by ourselves. The following is my simple
solution for this objective.

Firstly, I describe the scenario of my solution,

1.A .net Windows service named service.exe located at c:\services\
2.A folder named c:\services\updates stores the new version of a .net
Windows service
3.Now, you have a new version of the above mentioned service named
newservice.exe
4.An app named serviceupdate.exe is located at c:\services\ for updating a
services automatically
Now, the solution is described as the following steps:

1.Creating an instance of FileSystemWatcher to listen to the change of file
system, the code looks like:
private void IntializeFileSystemWatcher()
{
System.IO.FileSystemWatcher newexe = new System.IO.FileSystemWatcher(
"c:\\services\\Updates", "newservice.exe");
//other codes are described in step 2
}

protected override void OnStart(string[] args)
{
IntializeFileSystemWatcher();
}

2.Listen to the Created or Changed event of the FileSystemWatcher instance,
the code looks like:
//the following code is put in the method IntializeFileSystemWatcher()
newexe.Created += new FileSystemEventHandler(NewExecutable);
newexe.Changed += new FileSystemEventHandler(NewExecutable);
newexe.EnableRaisingEvents = true;

private void NewExecutable(object source, FileSystemEventArgs e)
{
Process.Start("c:\\services\\serviceupdate.exe","service",
"newservice");
}

The above code listen to the changed and created event. When the event
occurs, serviceupdate.exe will be called to automatically update services.

3.Creating the serviceupdate.exe app. The app is a simply console
application that is used to stop the old service, replace the service file
and then restart new service. The code looks like:
static void Main(string[] args)
{
if (args.Length == 0)
return;

string oldname = args[0];
string newname = args[1];

System.ServiceProcess.ServiceController target = new
System.ServiceProcess.ServiceController(oldname);
target.Stop();

while(target.Status
!=System.ServiceProcess.ServiceControllerStatus.Stopped)
{
target.Refresh();
}
Thread.Sleep(2000);

File.Delete("c:\\services\\" + oldname + ".exe");
File.Move("c:\\services\\Updates\\" + newname + ".exe", "c:\\services\\"
+ newname + ".exe");

target.Start();
}

Serviceupdate.exe needs two parameters. The first one is the name of old
services that is located at c:\seriveces in the solution. The second one is
the name of new services that is located at c:\services\updates in the
solution. Of course, you can set the same name for the old and new service
because they are in different folder.

Another solution is to create a separate AppDomain for each unique managed
service assembly and use Remoting to create and control the managed
service's IService implementation. There are two nice articles related to
this topic here.

http://www.15seconds.com/issue/040624.htm
http://www.15seconds.com/issue/040817.htm

Please let me know if these help for your scenario. If you have any future
questions or concerns, please let me know.


Best regards,
Ji Zhou (v-(E-Mail Removed), remove 'online.')
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(E-Mail Removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/en-us/subs...#notifications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://support.microsoft.com/select/...tance&ln=en-us.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.

 
Reply With Quote
 
Peter
Guest
Posts: n/a
 
      3rd Nov 2008

"""Ji Zhou [MSFT]""" <v-(E-Mail Removed)> wrote in message
news:%(E-Mail Removed)...
> Hello Peter,
>
> Actually, from the MSDN document
> http://msdn.microsoft.com/en-us/library/ms973805.aspx, we can see that the
> ClickOnce does not support installing the .Net Windows Services. We have
> to
> implement the self update logical by ourselves. The following is my simple
> solution for this objective.
>
> Firstly, I describe the scenario of my solution,
>
> 1.A .net Windows service named service.exe located at c:\services\
> 2.A folder named c:\services\updates stores the new version of a .net
> Windows service
> 3.Now, you have a new version of the above mentioned service named
> newservice.exe
> 4.An app named serviceupdate.exe is located at c:\services\ for updating a
> services automatically
> Now, the solution is described as the following steps:
>
> 1.Creating an instance of FileSystemWatcher to listen to the change of
> file
> system, the code looks like:
> private void IntializeFileSystemWatcher()
> {
> System.IO.FileSystemWatcher newexe = new System.IO.FileSystemWatcher(
> "c:\\services\\Updates", "newservice.exe");
> //other codes are described in step 2
> }
>
> protected override void OnStart(string[] args)
> {
> IntializeFileSystemWatcher();
> }
>
> 2.Listen to the Created or Changed event of the FileSystemWatcher
> instance,
> the code looks like:
> //the following code is put in the method IntializeFileSystemWatcher()
> newexe.Created += new FileSystemEventHandler(NewExecutable);
> newexe.Changed += new FileSystemEventHandler(NewExecutable);
> newexe.EnableRaisingEvents = true;
>
> private void NewExecutable(object source, FileSystemEventArgs e)
> {
> Process.Start("c:\\services\\serviceupdate.exe","service",
> "newservice");
> }
>
> The above code listen to the changed and created event. When the event
> occurs, serviceupdate.exe will be called to automatically update services.
>
> 3.Creating the serviceupdate.exe app. The app is a simply console
> application that is used to stop the old service, replace the service file
> and then restart new service. The code looks like:
> static void Main(string[] args)
> {
> if (args.Length == 0)
> return;
>
> string oldname = args[0];
> string newname = args[1];
>
> System.ServiceProcess.ServiceController target = new
> System.ServiceProcess.ServiceController(oldname);
> target.Stop();
>
> while(target.Status
> !=System.ServiceProcess.ServiceControllerStatus.Stopped)
> {
> target.Refresh();
> }
> Thread.Sleep(2000);
>
> File.Delete("c:\\services\\" + oldname + ".exe");
> File.Move("c:\\services\\Updates\\" + newname + ".exe", "c:\\services\\"
> + newname + ".exe");
>
> target.Start();
> }
>
> Serviceupdate.exe needs two parameters. The first one is the name of old
> services that is located at c:\seriveces in the solution. The second one
> is
> the name of new services that is located at c:\services\updates in the
> solution. Of course, you can set the same name for the old and new service
> because they are in different folder.
>
> Another solution is to create a separate AppDomain for each unique
> managed
> service assembly and use Remoting to create and control the managed
> service's IService implementation. There are two nice articles related to
> this topic here.
>
> http://www.15seconds.com/issue/040624.htm
> http://www.15seconds.com/issue/040817.htm
>
> Please let me know if these help for your scenario. If you have any future
> questions or concerns, please let me know.
>
>
> Best regards,
> Ji Zhou (v-(E-Mail Removed), remove 'online.')
> Microsoft Online Community Support
>
> Delighting our customers is our #1 priority. We welcome your comments and
> suggestions about how we can improve the support we provide to you. Please
> feel free to let my manager know what you think of the level of service
> provided. You can send feedback directly to my manager at:
> (E-Mail Removed).
>
> ==================================================
> Get notification to my posts through email? Please refer to
> http://msdn.microsoft.com/en-us/subs...#notifications.
>
> Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
> where an initial response from the community or a Microsoft Support
> Engineer within 1 business day is acceptable. Please note that each follow
> up response may take approximately 2 business days as the support
> professional working with you may need further investigation to reach the
> most efficient resolution. The offering is not appropriate for situations
> that require urgent, real-time or phone-based interactions or complex
> project analysis and dump analysis issues. Issues of this nature are best
> handled working with a dedicated Microsoft Support Engineer by contacting
> Microsoft Customer Support Services (CSS) at
> http://support.microsoft.com/select/...tance&ln=en-us.
> ==================================================
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>


Thank you very much, just what I was looking for


 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to determine when my last Winows Update was? nomail1983@hotmail.com Windows XP General 3 6th Sep 2006 11:30 AM
winows xp update ram Windows XP General 0 1st Oct 2004 11:18 AM
Winows Update location Bob Windows XP Configuration 1 9th Aug 2004 08:09 PM
Winows XP reboots automatically =?Utf-8?B?U2ljaGVs?= Windows XP Help 1 15th Jun 2004 09:15 AM
BlueYonder conflict following Winows Update Sylkandaar Windows XP Networking 0 5th Jun 2004 08:11 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 09:32 PM.