Tim Schwartz wrote:
+ if(!strcasecmp(operation, "start"))
+ {
+ printf("The %s service is starting.\n", service_display_name);
+ result = StartService(serviceHandle,0,NULL);
+ CloseServiceHandle(serviceHandle);
+ if(!result) printf("The %s service failed to start.\n",
service_display_name);
+ else printf("The %s service was started successfully.\n",
service_display_name);
+
+ HeapFree(GetProcessHeap(), 0, service_display_name);
+ CloseServiceHandle(SCManager);
+ return result;
+ }
+
+ CloseServiceHandle(serviceHandle);
+ CloseServiceHandle(SCManager);
+ HeapFree(GetProcessHeap(), 0, service_display_name);
+ return 0;
+}
I think with a little rearrangment of the code and returning result at the
end you
could avoid duplicating those CloseServiceHandle() and HeapFree() calls.
int main(int argc, char *argv[])
{
- int ret = 0;
if (argc < 2)
{
printf("The syntax of this command is:\n\n");
- printf("NET [ HELP ]\n");
+ printf("NET [ HELP | START ]\n");
return 1;
}
@@ -35,7 +88,24 @@ int main(int argc, char *argv[])
printf("The syntax of this command is:\n\n");
printf("NET HELP command\n -or-\nNET command /HELP\n\n");
printf(" Commands available are:\n");
- printf(" NET HELP\n");
+ printf(" NET HELP NET START\n");
}
- return ret;
+
+ if(!strcasecmp(argv[1], "start"))
+ {
+ if(argc < 3)
+ {
+ printf("Specify service name to start.\n");
+ return 1;
+ }
+
+ if(!net_service(argv[1], argv[2]))
+ {
+ return 1;
+ }
+ return 0;
+ }
+
+
+ return 0;
}
Me thinks it would be cleaner to only string test for the command in the
main()
and pass in a constant you define somewhere to net_service() that specifies
the
operation to perform. That will allow you to use a switch statement in
net_service()
and make the code a lot easier to read. Also adding new commands won't make
the
whole such a big mess as it would now.
Also consider to use TRUE and FALSE as return value. This being a Windows
tool
and not a Unix one it seems clearer to me.
Rolf Kalbermatter