从 windows 服务调用时,C++ Interop 的行为不同

C++ Interop behaves differently when called from windows service

我有一个对 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++ 代码创建的.

造成这种差异的原因是什么?

实际上正在创建文件,但运行作为服务时的工作目录不同:as explained here