C# - Windows Service installer fails in custom action - c#

We install a windows service from a custom action as described here: CodeProject
Every so often, when uninstalling our application, it does not properly uninstall the service. Instead it "marks the service for deletion".
You can see this message by running installutil.exe /u on our executable, when it is supposedly uninstalled.
Has anyone seen this issue or know a workaround? If a service is somehow installed with the same name as ours, we'd like to replace it. Instead the msi setup fails, giving a message saying our service is already installed.
Is there a way to do it without making a custom action to first uninstall any existing instances of our service's name before running the install custom action?

Is the service control panel (services.msc) open while you uninstall? This prevents your service from correctly being uninstalled.
If nothing else helps a reboot might be required as recommended in this article (though originally applying to .NET 1.1).

Check, if your service correctly stops additional thread(s) started from the service.

Related

How to update windows service (Not auto update)

I inherited a couple c# windows service projects. I have fixed some bugs in the code and now I need to deploy the new executable. What is the normal process for updating / replacing a windows service? I have remote desktop access to the server that I am installing it on.
Just stop the service and replace the executable and possibli the additional dependency you have updated. Of course it could be helpful have a backup of the running service, just to be safe :)
If you need to know exactly where the service is running, open Service Control Manager, select your serice, and look in the properties/general: you will find the executable path.
It's enough to replace exe and dlls. Obviously you have to stop the service first. If dlls were registered in GAC they might be used by other software on that machine, in such case before compiling and deploying change their version.
For a .Net Windows Service you need to use the InstallUtil command line tool to uninstall the old service, then use it to install the new one.
See...
http://msdn.microsoft.com/en-us/library/50614e95(v=vs.80).aspx

Installing a Windows Service -Setup.exe fails

There is a weird issue I am facing. I created my first windows service looking through various blogs and tutorials.
Then created setup for that adding installer etc. It works fine while installing , un-installing via Visual Studio but it fails when i deploy it .
Below is a summary of the errors, details of these errors are listed later in the log.
* Activation of C:\Users\bhuvint\Documents\Visual Studio 2010\Projects\CPNS Library\ServicePackage\CommonPushNotificationWindowsService.application resulted in exception. Following failure messages were detected:
+ You cannot start application CommonPushNotificationWindowsService from this location because it is already installed from a different location.
+ You cannot start application CommonPushNotificationWindowsService from location file:///C:/Users/bhuvint/Documents/Visual%20Studio%202010/Projects/CPNS%20Library/ServicePackage/CommonPushNotificationWindowsService.application it is already installed from location file:///C:/inetpub/wwwroot/ServicePackage/CommonPushNotificationWindowsService.application. You can start it from location file:///C:/inetpub/wwwroot/ServicePackage/CommonPushNotificationWindowsService.application or you can uninstall it and reinstall it from location file:///C:/Users/bhuvint/Documents/Visual%20Studio%202010/Projects/CPNS%20Library/ServicePackage/CommonPushNotificationWindowsService.application.
I have already un-installed the service and trying to install it from the deployed service in the same pc to test. But it fails with above error.
I feel i have deployed the windows service the wrong way. Could you guys please suggest how to deploy a windows service ?? (I have looked through net. All suggest building it and installing it from visual studios. But how to publish it is the thing which i need.)
Please help asap.
Possibly you built the setup project before uninstalling the preovious service. In that case you can't use the new setup to uninstall the service, since the setup won't be the same and can't be able to access the service installed.
You should try to go to a previous version of your project and uninstall the service and for the future unistall the service each time you're building your setup project.
This happened to me several times.
Run visual studio in debug mode, and in your properties of your service project goto tab build events in Post-Build event command line and add a -d so you can run your service without installing it, it will run as an console app
The LocalService account acts as a non-privileged user on the local computer, and presents anonymous credentials to any remote server. Use the other accounts with caution, as they run with higher privileges and increase your risk of attacks from malicious code.
If your service application will not install correctly, check to make sure that the ServiceName property for the service class is set to the same value as is shown in the installer for that service. The value must be the same in both instances in order for your service to install correctly.
NoteNote
You can also look at the installation logs to get feedback on the installation process.
You should also check to determine whether you have another service with the same name already installed. Service names must be unique for installation to succeed.
STUPIDITY PERSONIFIED
As i told i was deploying my service. So this published code had a "setup.exe" file to it. Now I had already created a setup project for the windows service , which i was using for the installing , uninstalling . And i din't know (These words needs courage !!) that msi file created is required to install the windows service. So as i got through the folder structure of the setup project. I came across the .msi file . And hence the problem got solved. The Main problem was :
Me not knowing to use setup projects
And I confused setup.exe with the published windows service with the setup of windows service.
I am really sorry for stealing bandwidth off your precious time. Thanks to all for the valuable inputs.

install windows service in custom actions

I have created a c# 4.0 windows service. I have created an installer project (.msi) for it which installs the service to a particular folder.
To automate the process fully, I would like to install the service as part of the custom actions I have for my installer.
How can I code my custom actions to install or when uninstalling the msi, uninstall the windows service?
You can use the ServiceInstaller class. A quick solution would be to find installutil tool and execute it against your Service.exe, but you have to capture the output to see whether the installation succeeded or not and you don't have much control over Install, Commit, Rollback, and Uninstall phases.
Simple answer: don't. The proper way is to install it using the MSI database itself, i.e. ServiceInstall and ServiceControl tables. Every single "convenient" IDE for MSI creation and also WiX come with primitives to make use of this builtin facility.
The very reason that this is best practice, just like including the COM registration in your MSI instead of calling DllRegisterServer of the COM (DLL) to register is that your application may be defunct at the time the user attempts to remove it.
The database actions can still be executed even by a newer Windows Installer, say after an upgrade of Windows itself, while your code may refuse to run or may not run for other reasons.

Windows Service Setup issue removing the windows service

I'm doing a windows service setup project on VS2008, it has a custom action for setting app.config values. The setup work fine installing the service and setting the app.config values but when I try to uninstall the service, it removes the files but keep the service registered, so I can install it again using the setup, I need to use "sc delete " in the vs command prompt to proper remove the service... anyone have any idea which could be the issue here?
Thank you.
I'm not sure whether you still have this issue or not, but still giving answer so that it helps others.
Use installer component along with your windows service and override OnBeforeUninstall method and write your own code to unregister the service, such as below
{frameworkpath}\InstallUtil.exe /u <serviceinstalledpath>
This should uninstall your service

C#: Running and Debugging a Windows Service

I am currently building a Windows Service with C# and I just can't figure out how to debug it.
I am building it and then registering with installutil:
> installutil MusicRepo_FileMonitor.exe
The Commit phase completed successfully.
The transacted install has completed.
And as you can see above, it is supposedly being registered successfully, but I can't find it in services.smc. I have also tried starting the service with net start [ServiceName] but it's telling me The service name is invalid. so I guess it's not finding it.
For the record, I'm on Vista and I'm developing the ws with .Net 3.5
[Update]
Solution
Try Task Manager and see if you see MusicRepo_FileMonitor.exe. If not, then the service is definitely not running.
Alternatively, in Visual Studio, Debug > Attach to Process, check show processes from all users, and see if its there.
Upon further research, I realized that I had no Installer attached to the service, so the problem was now fixed by adding an Installer.
Here is the tutorial I used to add a Service Installer and so on.

Categories