免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13696 | 回复: 13
打印 上一主题 下一主题

[C] 如何使在windows的cmd窗口中执行的程序,自动运行到后台去啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-18 12:01 |只看该作者 |倒序浏览
就好像系统里的tlntsvr程序一样,在cmd的窗口中执行完了就跑到后台去运行了,不会一直卡在cmd窗口中

请懂的兄弟帮忙哈~

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
2 [报告]
发表于 2012-12-18 12:04 |只看该作者
  1. #ifndef daemon_h
  2. #define daemon_h

  3. #include <windows.h>

  4. static SERVICE_STATUS daemon_status;;
  5. static SERVICE_STATUS_HANDLE daemon_handle;
  6. static DWORD deamon_argc;
  7. static char** daemon_argv;
  8. extern const char* daemon_name;

  9. static void WINAPI daemon_ctrl(DWORD dwControl){
  10.     switch (dwControl){
  11.         case SERVICE_CONTROL_PAUSE:
  12.             daemon_status.dwCurrentState = SERVICE_PAUSE_PENDING;
  13.             SetServiceStatus(daemon_handle, &daemon_status);
  14.             daemon_status.dwCurrentState = SERVICE_PAUSED;
  15.             break;

  16.         case SERVICE_CONTROL_CONTINUE:
  17.             daemon_status.dwCurrentState = SERVICE_CONTINUE_PENDING;
  18.             SetServiceStatus(daemon_handle, &daemon_status);
  19.             daemon_status.dwCurrentState = SERVICE_RUNNING;
  20.             break;

  21.         case SERVICE_CONTROL_STOP:
  22.             daemon_status.dwCurrentState = SERVICE_STOP_PENDING;
  23.             SetServiceStatus(daemon_handle, &daemon_status);
  24.             daemon_status.dwCurrentState = SERVICE_STOPPED;
  25.             break;

  26.         case SERVICE_CONTROL_SHUTDOWN:
  27.             break;

  28.         case SERVICE_CONTROL_INTERROGATE:
  29.             daemon_status.dwCurrentState = SERVICE_RUNNING;
  30.             break;
  31.     }
  32.     SetServiceStatus(daemon_handle, &daemon_status);
  33. }

  34. static int daemon_initialize(){
  35.     daemon_status.dwServiceType = SERVICE_WIN32;
  36.     daemon_status.dwCurrentState = SERVICE_START_PENDING;
  37.     daemon_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
  38.     daemon_status.dwWin32ExitCode = 0;
  39.     daemon_status.dwServiceSpecificExitCode = 0;
  40.     daemon_status.dwCheckPoint = 0;
  41.     daemon_status.dwWaitHint = 0;

  42.     daemon_handle = RegisterServiceCtrlHandler(daemon_name, daemon_ctrl);
  43.     if(daemon_handle == 0){
  44.         return -1;
  45.     }

  46.     daemon_status.dwCheckPoint = 0;
  47.     daemon_status.dwWaitHint = 0;
  48.     daemon_status.dwCurrentState = SERVICE_RUNNING;
  49.     SetServiceStatus(daemon_handle, &daemon_status);

  50.     return 0;
  51. }

  52. #define main                                                /
  53. main(int argc, char* argv[]){                               /
  54.     deamon_argc = argc;                                     /
  55.     daemon_argv = argv;                                     /
  56.     void WINAPI daemon_wrapper(DWORD argc, char* argv[]);   /
  57.     SERVICE_TABLE_ENTRY service_table_entry[] =             /
  58.     {                                                       /
  59.         {(char *) daemon_name, daemon_wrapper},             /
  60.         {0, 0}                                              /
  61.     };                                                      /
  62.     StartServiceCtrlDispatcher(service_table_entry);        /
  63. }                                                           /
  64.                                                             /
  65. void WINAPI daemon_wrapper(DWORD argc, char* argv[]){       /
  66.     if(-1 == daemon_initialize()){                          /
  67.         return;                                             /
  68.     }                                                       /
  69.     extern int daemon_main(int argc, char* argv[]);         /
  70.     daemon_main((int) deamon_argc, daemon_argv);            /
  71. }                                                           /
  72. int daemon_main

  73. #endif
复制代码
回复 1# ddgfff


   

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
3 [报告]
发表于 2012-12-18 12:06 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2012-12-18 12:33 |只看该作者
感谢回复!
我想将程序写成这样,而不希望通过start这样的调用实现,呵呵

回复 3# liuiang


   

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
5 [报告]
发表于 2012-12-18 13:07 |只看该作者
看来各位都是 windows unix 通杀。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
6 [报告]
发表于 2012-12-18 13:18 |只看该作者
try /subsystem:windows instead /subsystem:console
(if you use vs application wizar, it is easy to change applicate type to win32 application)
then delete all additional functions & empty the _tWinMain function (it acts as the main do in console application).
if you needed a console, use api AllocConsole  to do it.

论坛徽章:
3
寅虎
日期:2013-11-27 07:53:29申猴
日期:2014-09-12 09:24:152015年迎新春徽章
日期:2015-03-04 09:48:31
7 [报告]
发表于 2012-12-18 13:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-21 06:20:00
8 [报告]
发表于 2012-12-18 13:34 |只看该作者
sc create [servicename] [binPath] ...

net start servicename.

论坛徽章:
0
9 [报告]
发表于 2012-12-18 13:39 |只看该作者
windows编程我还不太熟悉,没有通吃,只是写个小工具

socay2 发表于 2012-12-18 13:07
看来各位都是 windows unix 通杀。

论坛徽章:
0
10 [报告]
发表于 2012-12-18 13:47 |只看该作者
这个方法不行哦。。
我试过了

回复 7# Sevk


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP