C++ 确定程序在运行时是否在Wine下运行

C++ 确定程序在运行时是否在Wine下运行,c++,wine,C++,Wine,我认为这个标题是不言自明的。。。我在C++中编写一个应用程序,我需要在运行时确定是否在Buffine下运行(为了改变特定的Bug bug,改变BaHavior)。 是否有一种程序员友好的方式,或者我应该处理运行过程?有许多特定于葡萄酒的注册表项: HKEY_CURRENT_USER\Software\Wine HKEY_LOCAL_MACHINE\Software\Wine 有关于如何检查这些特定于葡萄酒的注册表项的答案。此答案只是用户1457056评论的副本。由于链接经常消失,答案偶尔也会变

我认为这个标题是不言自明的。。。我在C++中编写一个应用程序,我需要在运行时确定是否在Buffine下运行(为了改变特定的Bug bug,改变BaHavior)。
是否有一种程序员友好的方式,或者我应该处理运行过程?

有许多特定于葡萄酒的注册表项:

HKEY_CURRENT_USER\Software\Wine
HKEY_LOCAL_MACHINE\Software\Wine

有关于如何检查这些特定于葡萄酒的注册表项的答案。

此答案只是用户1457056评论的副本。由于链接经常消失,答案偶尔也会变得无用。为了保留这个有用的答案,我复制了这里的链接内容:

#include <windows.h>
#include <stdio.h>
int main(void)
{
    static const char *(CDECL *pwine_get_version)(void);
    HMODULE hntdll = GetModuleHandle("ntdll.dll");
    if(!hntdll)
    {
        puts("Not running on NT.");
        return 1;
    }

    pwine_get_version = (void *)GetProcAddress(hntdll, "wine_get_version");
    if(pwine_get_version)
    {
        printf("Running on Wine... %s\n",pwine_get_version());
    }
    else
    {
        puts("did not detect Wine.");
    }

    return 0;
}
#包括
#包括
内部主(空)
{
静态常量字符*(CDECL*pwine\U get\U版本)(无效);
HMODULE hntdll=GetModuleHandle(“ntdll.dll”);
如果(!hntdll)
{
放置(“不在NT上运行”);
返回1;
}
pwine_get_version=(void*)GetProcAddress(HNTDL,“wine_get_version”);
如果(pwine_get_版本)
{
printf(“在葡萄酒上运行…%s\n”,pwine_get_version());
}
其他的
{
puts(“未检测到葡萄酒”);
}
返回0;
}

如果您在Wine中发现了一个bug,请务必报告它。@Kerrek这是一个编译时常量。您确定这是一个Wine bug,而不是依赖Windows的非文档化行为吗?不,我不是,但这并不重要。:)我知道如何解决这个问题,我只需要知道我是不是喝多了。我将尝试使用注册表。更好的回答:请参阅