From 9b22b270ccf79e91778443506dc7db6a16bdbc70 Mon Sep 17 00:00:00 2001 From: ud18010 Date: Fri, 17 Jul 2026 16:43:24 +0800 Subject: [PATCH] =?UTF-8?q?ModelTranslator:=20=E4=BF=AE=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E8=A1=A8=20rizomuv=20=E5=80=BC=E6=97=A0=E5=90=8E=E7=BC=80?= =?UTF-8?q?=E8=87=B4=E5=8F=91=E7=8E=B0=E5=A4=B1=E6=95=88=E2=80=94=E2=80=94?= =?UTF-8?q?=E6=8B=BC=E5=9B=9E=E7=9C=9F=E5=AE=9E=20exe=EF=BC=88=E5=AE=A1?= =?UTF-8?q?=E6=9F=A5=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tools/ModelTranslator/rizom_unwrap.py | 6 ++++-- Tools/ModelTranslator/tests/test_rizom_unwrap.py | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Tools/ModelTranslator/rizom_unwrap.py b/Tools/ModelTranslator/rizom_unwrap.py index 48718dd7..d3a2b3bb 100644 --- a/Tools/ModelTranslator/rizom_unwrap.py +++ b/Tools/ModelTranslator/rizom_unwrap.py @@ -33,8 +33,10 @@ def registry_rizom_path(): continue key_path = "SOFTWARE\\Rizom Lab\\RizomUV VS RS 202%d.%d" % (i, j) try: - key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path) - return winreg.QueryValue(key, "rizomuv.exe") + with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key_path) as key: + val = winreg.QueryValue(key, "rizomuv.exe") + # 注册表值是不带后缀的安装前缀(官方只取 dirname 用),拼回真实 exe + return os.path.join(os.path.dirname(val), "rizomuv.exe") except OSError: continue return None diff --git a/Tools/ModelTranslator/tests/test_rizom_unwrap.py b/Tools/ModelTranslator/tests/test_rizom_unwrap.py index aa74dc89..3b2e2096 100644 --- a/Tools/ModelTranslator/tests/test_rizom_unwrap.py +++ b/Tools/ModelTranslator/tests/test_rizom_unwrap.py @@ -1,6 +1,7 @@ import os import sys import unittest +from unittest import mock sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import rizom_unwrap as ru @@ -21,10 +22,17 @@ class TestCandidatePaths(unittest.TestCase): class TestFindRizomuv(unittest.TestCase): def test_missing_exe_raises(self): - os.environ.pop("RIZOMUV_EXE", None) - with self.assertRaises(ru.RizomError): - ru.find_rizomuv("Z:/no/such/rizomuv.exe", use_registry=False, - default="Z:/no/default.exe") + with mock.patch.dict(os.environ): + os.environ.pop("RIZOMUV_EXE", None) + with self.assertRaises(ru.RizomError): + ru.find_rizomuv("Z:/no/such/rizomuv.exe", use_registry=False, + default="Z:/no/default.exe") + + def test_registry_value_is_real_exe_if_present(self): + p = ru.registry_rizom_path() + if p is None: + self.skipTest("本机无 RizomUV 注册表项") + self.assertTrue(os.path.isfile(p), "注册表返回值应是真实 exe:%s" % p) if __name__ == "__main__":