我有下面的代码给系统32文件夹内的本地应用程序数据文件夹。我附上了以下代码:SHGetFolderPath返回本地路径,但不是当与服务相同时运行
int WriteToLog(const char* str)
{
FILE* log;
log = fopen("C:\\lpa\\sample.txt", "a+");
if (log == NULL)
return -1;
fprintf(log, "%s\n", str);
fclose(log);
return 0;
}
std::string GetLocalAppDataPath()
{
HANDLE hfile;
TCHAR szPath[MAX_PATH];
if(SUCCEEDED(SHGetFolderPath(NULL,CSIDL_LOCAL_APPDATA,NULL,0, szPath)))
{
std::string path = boost::lexical_cast<std::string>(szPath);
boost::replace_all(path, "\\", "\\\\");
return path;
}
}
void LoggingInit()
{
log4cplus::initialize();
helpers::LogLog::getLogLog()->setInternalDebugging(false);
std::string app_data_path = GetLocalAppDataPath();
std::string log_folder_path = app_data_path + "\\\\lpa\\\\output\\\\";
std::string log_file = log_folder_path + "output.log";
WriteToLog(log_file.c_str());
SharedAppenderPtr append_1(new RollingFileAppender(LOG4CPLUS_TEXT(log_file), 10*1024*1024, 5));
append_1->setName(LOG4CPLUS_TEXT("LogpointAgentLog"));
PatternLayout *p = new PatternLayout(LOG4CPLUS_TEXT("[%D] <%-5p> [%F : %L] %m%n"));
append_1->setLayout(std::auto_ptr<Layout>(p));
Logger::getRoot().addAppender(append_1);
root = Logger::getRoot();
WriteToLog("Loging Init Successful");
//std::string path = GetRegistryPath();
//WriteToLog(path.c_str());
}
当我使用制作服务创建运行程序时,我没有得到真正的本地应用程序数据路径。
int main(int argc, char **argv)
{
WriteToLog("Logging Init");
LoggingInit();
LOG4CPLUS_INFO(root, "Running as service");
StartLpaService(); //Here I am creating a service.
return 0;
}
我得到以下数据中创建的文本文件通过WriteToLog功能
Logging Init
C:\\WINDOWS\\system32\\config\\systemprofile\\AppData\\Local\\lpa\\output\\output.log
Loging Init Successful
我得到的本地应用程序数据路径如果可执行文件运行正常,而不是服务。
C:\\Users\\logpoint\\AppData\\Local\\
代码有什么问题?
你在哪个用户帐户下运行服务?显然,它不是'logpoint';可能是'SYSTEM'。每个账户的“一条真实路径”是不同的。 – 2014-12-09 02:19:58
我遇到过使用LoadUserProfile(),ImpersonateLoggedOnUser()等函数模拟HKCU的信息。关于如何模拟当前用户并获取登录用户的LocalAppData路径,您有任何参考吗? – Pant 2014-12-09 16:44:34
哪位用户是“当前用户”?在任何时候,可以有零个,一个或多个交互式用户登录到正在运行服务的计算机上。为什么你想要你的服务写文件到用户的配置文件?这是一件不寻常的事情想要做。 – 2014-12-09 17:53:48