运行时判断程序是不是在Wine下运行

Posted

技术标签:

【中文标题】运行时判断程序是不是在Wine下运行【英文标题】:Determine whether a program is running under Wine at runtime运行时判断程序是否在Wine下运行 【发布时间】:2011-11-14 09:39:47 【问题描述】:

我认为标题是不言自明的......我正在用 C++ 编写一个应用程序,我需要在运行时确定我是否在 Wine 下运行(稍微改变一下行为以避免特定的 Wine 错误)。 有没有一种程序员友好的方式,或者我应该摆弄正在运行的进程?

【问题讨论】:

如果您发现 Wine 中的错误,请务必报告。 @Kerrek 这是一个编译时间常数。 您确定这是一个 Wine 错误,而不是您依赖于 Windows 的未记录行为吗? 不,我不是,但这并不重要。 :) 我知道如何解决这个问题,我只需要知道我是否在 Wine 下运行。我会尝试使用注册表。 更好的答案:winehq.org/pipermail/wine-devel/2008-September/069387.html 另见wiki.winehq.org/… 【参考方案1】:

此答案只是 user1457056 评论的副本。由于链接经常失效,因此答案有时会变得无用。为了保留这个有用的答案,我复制了这里的链接内容:

#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;

【讨论】:

【参考方案2】:

有许多 Wine 特定的注册表项:

HKEY_CURRENT_USER\Software\Wine
HKEY_LOCAL_MACHINE\Software\Wine

Checking if a registry key exists 提供了如何检查这些 Wine 特定注册表项的答案。

【讨论】:

以上是关于运行时判断程序是不是在Wine下运行的主要内容,如果未能解决你的问题,请参考以下文章

在wine下运行程序的问题

debian桌面环境下利用wine怎么运行exe?求详细图解

如何使用WINE运行

如何在运行时判断 iOS 应用程序是不是正在通过 TestFlight Beta 安装运行

有谁linux下用wine运行过游戏,比如LOL

linux wine 怎么使用?