i2pd/DaemonWin32.cpp

99 lines
2.4 KiB
C++
Raw Normal View History

2016-01-20 03:00:00 +03:00
#include "Config.h"
2014-04-20 05:54:34 +04:00
#include "Daemon.h"
#include "util.h"
#include "Log.h"
2014-04-20 05:54:34 +04:00
#ifdef _WIN32
#include "Win32/Win32Service.h"
2016-03-09 22:41:14 +03:00
#include "Win32/Win32App.h"
2014-04-20 05:54:34 +04:00
namespace i2p
{
namespace util
{
bool DaemonWin32::init(int argc, char* argv[])
2014-04-20 05:54:34 +04:00
{
setlocale(LC_CTYPE, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
if (!Daemon_Singleton::init(argc, argv))
return false;
std::string serviceControl; i2p::config::GetOption("svcctl", serviceControl);
if (serviceControl == "install")
{
LogPrint(eLogInfo, "WinSVC: installing ", SERVICE_NAME, " as service");
InstallService(
SERVICE_NAME, // Name of service
SERVICE_DISPLAY_NAME, // Name to display
SERVICE_START_TYPE, // Service start type
SERVICE_DEPENDENCIES, // Dependencies
SERVICE_ACCOUNT, // Service running account
SERVICE_PASSWORD // Password of the account
);
return false;
}
else if (serviceControl == "remove")
{
LogPrint(eLogInfo, "WinSVC: uninstalling ", SERVICE_NAME, " service");
UninstallService(SERVICE_NAME);
return false;
}
if (isDaemon == 1)
{
LogPrint(eLogDebug, "Daemon: running as service");
I2PService service(SERVICE_NAME);
if (!I2PService::Run(service))
{
LogPrint(eLogError, "Daemon: Service failed to run w/err 0x%08lx\n", GetLastError());
return false;
}
return false;
}
else
LogPrint(eLogDebug, "Daemon: running as user");
return true;
2016-03-09 22:41:14 +03:00
}
bool DaemonWin32::start()
{
setlocale(LC_CTYPE, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
2016-03-09 22:41:14 +03:00
if (!i2p::win32::StartWin32App ()) return false;
2016-03-10 20:23:17 +03:00
// override log
i2p::config::SetOption("log", std::string ("file"));
2016-03-06 05:46:01 +03:00
bool ret = Daemon_Singleton::start();
if (ret && IsLogToFile ())
2016-03-09 22:41:14 +03:00
{
2016-03-06 05:46:01 +03:00
// TODO: find out where this garbage to console comes from
SetStdHandle(STD_OUTPUT_HANDLE, INVALID_HANDLE_VALUE);
SetStdHandle(STD_ERROR_HANDLE, INVALID_HANDLE_VALUE);
}
2016-03-10 05:20:27 +03:00
bool insomnia; i2p::config::GetOption("insomnia", insomnia);
if (insomnia)
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED);
2016-03-06 05:46:01 +03:00
return ret;
2014-04-20 05:54:34 +04:00
}
bool DaemonWin32::stop()
2016-03-09 22:41:14 +03:00
{
i2p::win32::StopWin32App ();
2014-04-20 05:54:34 +04:00
return Daemon_Singleton::stop();
2016-03-09 22:41:14 +03:00
}
void DaemonWin32::run ()
{
i2p::win32::RunWin32App ();
}
2014-04-20 05:54:34 +04:00
}
}
2015-12-18 15:27:47 +03:00
#endif