当从windows服务调用C++互操作时,其行为会有所不同



我有一个C#可执行文件,它对C++库进行互操作调用:

[DllImport(DLL_NAME, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I4)]
public static extern int Check(string name, string version, bool debug);

在C++代码中,我将std::cout重定向到一个文件:

std::streambuf* psbuf, * backup;
std::ofstream filestr;
...
if (debug)
{
filestr.open("debug.txt");
backup = std::cout.rdbuf();
psbuf = filestr.rdbuf();
std::cout.rdbuf(psbuf);
std::cout << "some debug message" << std::endl; 
std::cout.rdbuf(backup);
filestr.close();
}

当我将C#可执行文件作为控制台程序运行时,这很好,但当我将其作为Windows服务运行时,文件不是由C++代码创建的。

什么可以解释这种差异?

文件实际上正在创建中,但作为服务运行时的工作目录不同:如所述

最新更新