查看: 6985|回复: 3
收起左侧

[讨论] 是否有必要使aria2后台运行

[复制链接]
os52
发表于 2018-5-14 12:57:38 | 显示全部楼层 |阅读模式
本帖最后由 os52 于 2018-5-22 16:39 编辑

20180522:使用新方式实现,行为改变。

测试用例(Windows, 64位):https://anonfile.com/IbXb76e5ba/aria2-1.34.0-daemon-win64.7z

效果:在.config/aria2/aria2.conf中指定了daemon=true后(测试用例已包含):
  • 双击运行,黑框自动关闭,并转入后台运行;
  • 在命令行(cmd.exe)中运行,自动转入后台运行,命令行窗口可继续执行其他命令,命令行窗口关闭后aria2c仍在后台运行;

PATCH:
  1. From 4e519234c15aa3380ed8effbedb08aba130af9c9 Mon Sep 17 00:00:00 2001
  2. From: myfreeer <myfreeer@users.noreply.github.com>
  3. Date: Tue, 22 May 2018 13:35:32 +0800
  4. Subject: [PATCH] option_processing: make use of --deamon on mingw

  5. ---
  6. src/OptionHandlerFactory.cc |  6 ++++++
  7. src/option_processing.cc    | 19 +++++++++++++++++++
  8. src/prefs.cc                |  2 ++
  9. src/prefs.h                 |  2 ++
  10. 4 files changed, 29 insertions(+)

  11. diff --git a/src/OptionHandlerFactory.cc b/src/OptionHandlerFactory.cc
  12. index 4339c91..86475ce 100644
  13. --- a/src/OptionHandlerFactory.cc
  14. +++ b/src/OptionHandlerFactory.cc
  15. @@ -173,6 +173,12 @@ std::vector<OptionHandler*> OptionHandlerFactory::createOptionHandlers()
  16.      op->addTag(TAG_ADVANCED);
  17.      handlers.push_back(op);
  18.    }
  19. +  {
  20. +    OptionHandler* op(new BooleanOptionHandler(
  21. +        PREF_NO_DAEMON, "", A2_V_FALSE, OptionHandler::OPT_ARG, 0));
  22. +    op->addTag(TAG_ADVANCED);
  23. +    handlers.push_back(op);
  24. +  }
  25.    {
  26.      OptionHandler* op(new UnitNumberOptionHandler(PREF_DISK_CACHE,
  27.                                                    TEXT_DISK_CACHE,
  28. diff --git a/src/option_processing.cc b/src/option_processing.cc
  29. index 652a3bd..b026c29 100644
  30. --- a/src/option_processing.cc
  31. +++ b/src/option_processing.cc
  32. @@ -319,6 +319,24 @@ error_code::Value option_processing(Option& op, bool standalone,
  33.      }
  34.    }
  35.    if (standalone && op.getAsBool(PREF_DAEMON)) {
  36. +#ifdef __MINGW32__
  37. +    if (!op.getAsBool(PREF_NO_DAEMON)) {
  38. +      std::wstring daemonCmdLine = GetCommandLineW();
  39. +      daemonCmdLine.append(L" --no-daemon");
  40. +      STARTUPINFOW si = {};
  41. +      PROCESS_INFORMATION pi = {};
  42. +      si.dwFlags = STARTF_USESHOWWINDOW;
  43. +      si.wShowWindow = FALSE;
  44. +      BOOL bRet = CreateProcessW(
  45. +        NULL, const_cast<LPWSTR>(daemonCmdLine.c_str()), NULL, NULL,
  46. +        FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
  47. +      if (bRet) {
  48. +        CloseHandle(pi.hThread);
  49. +        CloseHandle(pi.hProcess);
  50. +        ExitProcess(0);
  51. +      }
  52. +    }
  53. +#else // !__MINGW32__
  54. #if defined(__GNUC__) && defined(__APPLE__)
  55. // daemon() is deprecated on OSX since... forever.
  56. // Silence the warning for good, so that -Werror becomes feasible.
  57. @@ -334,6 +352,7 @@ error_code::Value option_processing(Option& op, bool standalone,
  58.        perror(MSG_DAEMON_FAILED);
  59.        return error_code::UNKNOWN_ERROR;
  60.      }
  61. +#endif // __MINGW32__
  62.    }
  63.    if (op.getAsBool(PREF_DEFERRED_INPUT) && op.defined(PREF_SAVE_SESSION)) {
  64.      A2_LOG_WARN("--deferred-input is disabled because of the presence of "
  65. diff --git a/src/prefs.cc b/src/prefs.cc
  66. index 937e927..7ebe208 100644
  67. --- a/src/prefs.cc
  68. +++ b/src/prefs.cc
  69. @@ -181,6 +181,8 @@ PrefPtr PREF_OUT = makePref("out");
  70. PrefPtr PREF_SPLIT = makePref("split");
  71. // value: true | false
  72. PrefPtr PREF_DAEMON = makePref("daemon");
  73. +// value: true | false
  74. +PrefPtr PREF_NO_DAEMON = makePref("no-daemon");
  75. // value: a string
  76. PrefPtr PREF_REFERER = makePref("referer");
  77. // value: 1*digit
  78. diff --git a/src/prefs.h b/src/prefs.h
  79. index e1f8397..bbaf753 100644
  80. --- a/src/prefs.h
  81. +++ b/src/prefs.h
  82. @@ -138,6 +138,8 @@ extern PrefPtr PREF_OUT;
  83. extern PrefPtr PREF_SPLIT;
  84. // value: true | false
  85. extern PrefPtr PREF_DAEMON;
  86. +// value: true | false
  87. +extern PrefPtr PREF_NO_DAEMON;
  88. // value: a string
  89. extern PrefPtr PREF_REFERER;
  90. // value: 1*digit
  91. --
  92. 2.17.0

复制代码
单选投票, 共有 13 人参与投票

投票已经结束

61.54% (8)
38.46% (5)
您所在的用户组没有投票权限
derQiQ
发表于 2018-5-27 18:43:56 | 显示全部楼层

后台参数或其它命令参数,可由命令行参数、或配置文件设置,命令参数行优先于配置文件,这样基本不用纠结了,爱用那样用那样,第三方调用也方便,面广。
kinguen
发表于 2018-5-29 19:24:18 | 显示全部楼层
我就这样aria2.vbs,放到startup里。轻松!
  1. CreateObject("WScript.Shell").Run "D:\Aria2\aria2c.exe --conf-path=D:\Aria2\aria2.conf",0,True
复制代码
os52
 楼主| 发表于 2018-5-30 08:33:53 | 显示全部楼层
本帖最后由 os52 于 2018-5-30 08:35 编辑
kinguen 发表于 2018-5-29 19:24
我就这样aria2.vbs,放到startup里。轻松!

本帖讨论的是为aria2原生的后台运行参数--daemon增加windows支持的问题,即通过命令行参数或aria2.conf控制aria2是否自动转入后台
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-24 02:36 , Processed in 0.123637 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表