diff --git a/windows/ZeroTierOne/ZeroTierOne.vcxproj b/windows/ZeroTierOne/ZeroTierOne.vcxproj
index 2bcc86030..1cfe8ae0e 100644
--- a/windows/ZeroTierOne/ZeroTierOne.vcxproj
+++ b/windows/ZeroTierOne/ZeroTierOne.vcxproj
@@ -113,7 +113,20 @@
-
+
+ false
+ false
+ false
+ true
+ StreamingSIMDExtensions2
+ NoExtensions
+ false
+ false
+ false
+ false
+ StreamingSIMDExtensions2
+ NoExtensions
+
diff --git a/windows/ZeroTierOne/ZeroTierOneService.cpp b/windows/ZeroTierOne/ZeroTierOneService.cpp
index 9b274d346..7e4cbf028 100644
--- a/windows/ZeroTierOne/ZeroTierOneService.cpp
+++ b/windows/ZeroTierOne/ZeroTierOneService.cpp
@@ -76,9 +76,7 @@ restart_node:
ZeroTier::Mutex::Lock _l(_lock);
delete _service;
_service = (ZeroTier::OneService *)0; // in case newInstance() fails
- _service = ZeroTier::OneService::newInstance(
- ZeroTier::OneService::platformDefaultHomePath().c_str(),
- ZT_DEFAULT_PORT);
+ _service = ZeroTier::OneService::newInstance(_path.c_str(), ZT_DEFAULT_PORT);
}
switch(_service->run()) {
case ZeroTier::OneService::ONE_UNRECOVERABLE_ERROR: {
@@ -120,10 +118,16 @@ restart_node:
}
}
-void ZeroTierOneService::OnStart(DWORD dwArgc, LPSTR *lpszArgv)
+void ZeroTierOneService::OnStart(DWORD dwArgc, PSTR *lpszArgv)
{
ZT_SVCDBG("ZeroTierOneService::OnStart()\r\n");
+ if ((dwArgc > 1)&&(lpszArgv[1])&&(strlen(lpszArgv[1]) > 0)) {
+ this->_path = lpszArgv[1];
+ } else {
+ this->_path = ZeroTier::OneService::platformDefaultHomePath();
+ }
+
try {
_thread = ZeroTier::Thread::start(this);
} catch ( ... ) {
diff --git a/windows/ZeroTierOne/ZeroTierOneService.h b/windows/ZeroTierOne/ZeroTierOneService.h
index dbcd8c6de..c4edb8209 100644
--- a/windows/ZeroTierOne/ZeroTierOneService.h
+++ b/windows/ZeroTierOne/ZeroTierOneService.h
@@ -57,11 +57,12 @@ public:
throw();
protected:
- virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
- virtual void OnStop();
+ virtual void OnStart(DWORD dwArgc, PSTR *pszArgv);
+ virtual void OnStop();
virtual void OnShutdown();
private:
+ std::string _path;
ZeroTier::OneService *volatile _service;
ZeroTier::Mutex _lock;
ZeroTier::Thread _thread;