如何从给定的文件夹列表中找到“ {game} .exe”?

问题描述 投票:0回答:2

假设我有一个名为“游戏”的文件夹。我将所有游戏都保存在该特定文件夹中。

我想从所有启动我的游戏的文件夹中提取所有二进制文件。在这里,我不能使用任何启动器:例如。蒸汽/来源等

到目前为止,我已经设法使该文件夹中存在所有二进制文件。但是这些都是随机的二进制文件,与实际的游戏二进制文件混合在一起。

仅提取游戏二进制文件的任何方法?

    '''
Finding binaries for games 
Eliminating other types of binaries, eg: uninstall.exe etc
''' 
def getStandalone(filePath = 'D:\\Games\\'):
    pattern = "*.exe"
    pattern2 = "unin*"
    for  root, dir, files in os.walk(filePath):
        for file in files:
            if(
                fnmatch.fnmatch(file, pattern) and 
                fnmatch.fnmatch(file, pattern) != 
                fnmatch.fnmatch(file, pattern2)
            ):
                print(file)

# print(getStandalone())

我能够删除“卸载”二进制文件,因为大多数二进制文件都以unin-开始

但这是这样做的一种非常肮脏的方式,我想提取游戏二进制文件而不是删除所有其他内容。

一件事突然浮现在我脑海。 Windows注册表。但是我不知道如何在注册表中进行“查找游戏”。我有一堆直接从CD复制的旧游戏。而且它们甚至不是真正的已安装。它们只是存在于我的驱动器上。那么我该如何找到那些呢?

python windows
2个回答
0
投票

最愚蠢的方法是用已知的可执行游戏名称预定义一个列表,并使用该列表过滤files中的结果。建立一个有礼貌的列表可能需要更长的时间,但是您的结果将非常精确。

一种更聪明的方法是遍历fileslist the DLLs loaded by that application中的每个元素(并且可能列出这些DLL的DLL),并丢弃不使用DirectX或OpenGL中的DLL的元素。但是,这种方法可能会产生一些假阴性结果:实际上是游戏但未直接加载这些库的应用程序将被标记为非游戏。

我认为安装程序不会在注册表中留下特殊/标准密钥。 PE format似乎也没有带有特殊标志来帮助区分游戏和非游戏应用程序的常规二进制文件。

最后,我相信一个很好的解决方案可能会使用多种策略来筛选候选游戏。我只是为您提供一些起点。


0
投票

您应该使用已知的游戏可执行文件列表。如前所述,许多游戏可以嵌入多个可执行文件。然后只需检查您是否有与此列表匹配的文件即可。

© www.soinside.com 2019 - 2024. All rights reserved.