Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Is Service Installed Hangup?

Posted on 2010-11-09
11
Medium Priority
?
283 Views
Last Modified: 2012-05-10

The following "IsServiceInstalled" method looks good, but it throws errors when cannot find a service.

I don't understand why it doesn't simply return "false" if a service is not found.

I use this code to call the following method;

        if (IsServiceInstalled(control.ServiceName))                    
        //run other code

        private bool IsServiceInstalled(string svcName)
        {
            ServiceController[] services = ServiceController.GetServices();

            foreach (ServiceController service in services)
            {
                if (service.ServiceName == svcName)
                    return true;
            }
            return false;
        }

       
0
Comment
Question by:pointeman
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
  • +1
11 Comments
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 34097648
I'm guessing that "ServiceController.GetServices()" is what is causing the exception. Even though you can enumerate the running services on a system, I have run into issues where certain processes cannot be accessed because of permissions. I would suggest putting a try/catch inside your foreach and/or elevating your program. I'm not completely sure the latter will do the trick.
0
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 34097658
Correction:

>>  I'm guessing that "ServiceController.GetServices()" is what is causing

I'm guessing that "service.ServiceName == svcName" is what is causing...
0
 
LVL 5

Expert Comment

by:Kenneth Brown
ID: 34097660
Step through the code in debugger to find which actual line throws the error.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 

Author Comment

by:pointeman
ID: 34097669
The more I think about it, I wonder if I'm not waiting long enough for a result. I know the list of services on any pc would be long.
Here's the method I use to call each servicecontroller:

foreach (ServiceController control in controllers)
{
       if (IsServiceInstalled(control.ServiceName))
       {
             ServiceCommand(control, (string)command);
       }
       Thread.Sleep(5000);
}  
 
0
 
LVL 13

Expert Comment

by:iHadi
ID: 34097695
The code runs smoothly without any exceptions and returns false if not found. Can you post the exception you are getting and the stack trace
0
 

Author Comment

by:pointeman
ID: 34097698
Doing this, but not any better:
try
{
       private bool IsServiceInstalled(string svcName)
        {
            ServiceController[] services = ServiceController.GetServices();

            foreach (ServiceController service in services)
            {
                if (service.ServiceName == svcName)
                    return true;
            }            
}
catch
{
     return false;
}
  return true;
}

 
0
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 2000 total points
ID: 34097727
That's not even valid code. You can't surround a function definition with a try/catch. What I was referring to was more like:
private bool IsServiceInstalled(string svcName)
{
    ServiceController[] services = ServiceController.GetServices();

    foreach (ServiceController service in services)
    {
        try
        {
            if (service.ServiceName == svcName)
                return true;
        }
        catch
        {
            // One failed
        }
    }
} 

Open in new window

0
 

Author Comment

by:pointeman
ID: 34097796
Good greif, isn't there a better way to look for a service exists before calling ServceControllers?
0
 
LVL 5

Expert Comment

by:Kenneth Brown
ID: 34097828
In your new sleep 5s method - when does it error? immediately, or after some time - that would surely indicate where roughly the problem is....
0
 
LVL 5

Expert Comment

by:Kenneth Brown
ID: 34097900
I missed a few posts, but surely the try/catch is just a temporary measure to narrow down what is causing the problem so you can handle it more nicely; not an actual solution. Is there any reason you cant debug it as my suggestion?
0
 

Author Comment

by:pointeman
ID: 34102735
Using this to solve problem, thanks....  

       private bool IsServiceInstalled(string svcName)
       {
           ServiceController[] services = ServiceController.GetServices();

           foreach (ServiceController service in services)
           {
                try
                {
                      if (service.ServiceName == svcName)
                             return true;
                }
                catch
                {
                     return false;
                }
               return false;
       }

 
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In order to hide the "ugly" records selectors (triangles) in the rowheaders, here are some suggestions. Microsoft doesn't have a direct method/property to do it. You can only hide the rowheader column. First solution, the easy way The first sol…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

636 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