今天我解决了这个问题,因为我正在开发的一些软件需要它。
正如上面的人所说; 您可以将目录硬编码为特定文件 - 但这意味着任何需要加载的配置文件都必须放置在那里。
对我来说,这项服务安装在超过 50,000 台计算机上。我们将其设计为从运行服务可执行文件的目录加载。
现在,这很容易作为非系统进程设置和实现(我的大部分测试都是作为非系统进程进行的)。但问题是您使用的系统包装器(我也使用过)使用 Unicode 格式(并且依赖于它),因此传统的执行方式无法正常工作。
代码的注释部分应该解释这一点。有一些冗余,我知道,但是当我写这篇文章时,我只是想要一个工作版本。幸运的是,您可以使用 GetModuleFileNameA 以 ASCII 格式处理它
我使用的代码是:
char buffer[MAX_PATH]; // create buffer
DWORD size = GetModuleFileNameA(NULL, buffer, MAX_PATH); // Get file path in ASCII
std::string configLoc; // make string
for (int i = 0; i < strlen(buffer); i++) // iterate through characters of buffer
{
if (buffer[i] == '\\') // if buffer has a '\' in it, replace with doubles
{
configLoc = configLoc + "\\\\"; // doubles needed for parsing. 4 = 2(str)
}
else
{
configLoc = configLoc + buffer[i]; // else just add char as normal
}
}
// Complete location
configLoc = configLoc.substr(0, configLoc.length() - 17); //cut the .exe off the end
//(change this to fit needs)
configLoc += "\\\\login.cfg"; // add config file to end of string
从这里开始,您可以简单地将 configLoc 解析为新的 ifsteam - 然后处理内容。