C ++ Interop ведет себя по-разному при вызове из windows службы - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть исполняемый файл 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 ++.

Что будет с учетной записью за эту разницу?

1 Ответ

1 голос
/ 07 апреля 2020

Файл фактически создается, но рабочий каталог при запуске в качестве службы отличается: как описано здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...