I am coding a program as service using c++, when I test it as a normal program, the function GetCurrentDirectory
returns the correct path. But when I try to install my program as service, GetCurrentDirectory
returns C:\\Windows\\System32
instead of the path of the executable.
How can I get the path of my executable file in a way that will work for a service?
Working directory for Windows services is always %WINDIR%\\System32
.
To get directory, where your executable resides, simply call GetModuleFileName with NULL for hModule
argument, and manually strip executable name.
Because %WinDir%\\System32
is the default working directory for a 32/64 bit Windows service ( %WinDir%\\SysWOW64
for 32 bit services on 64 bit Windows).
You may set working directory of your service to something else, see also Windows Service: Can I configure the current working directory? or - better - do not rely in your code about working directory. Few options:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\<service name>\\ImagePath
. GetModuleFileName()
. It's easy to use but be careful: it has some tricky behavior with WOW64, some virtualization environments and for svcshot
hosted services (it's little bit old but you may want to read this article .) QueryServiceConfig()
. What I'd suggest:
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath)
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.