【发布时间】:2026-02-05 18:00:01
【问题描述】:
我有一个从 Jenkins 服务器启动的程序。
我使用 pyinstaller 创建了一个 exe,并将其安装在两台计算机上。然后詹金斯打电话给他们两个。
起初我使用 os.path.expanduser('~') 来获取用户路径,但它返回了
"C:\Windows\System32\config\systemprofile"
在我尝试使用 os.environ['USERPROFILE'] 获取用户名之后 还是得到了:
"C:\Windows\System32\config\systemprofile"
最后我找到了一个不需要 os 模块的不同解决方案并尝试了:
import ctypes.wintypes
CSIDL_PERSONAL = 5 # My Documents
SHGFP_TYPE_CURRENT = 0 # Get current, not default value
buf= ctypes.create_unicode_buffer(ctypes.wintypes.MAX_PATH)
ctypes.windll.shell32.SHGetFolderPathW(None, CSIDL_PERSONAL, None,
SHGFP_TYPE_CURRENT, buf)
print(buf.value)
这在我的日志值中没有返回任何值。
如果我在本地运行 exe,所有值都会正常返回。 我运行的批处理命令是
start /wait C:\JenkinsResources\MarinaMain.exe
所以我画了一个空白,当我远程调用它时,我如何让这个程序找到它所在计算机的用户文件夹。
【问题讨论】:
-
是否有可能您的两台从属计算机以 SYSTEM 而不是正常登录用户的身份运行作业,这会阻止返回预期的结果?如果是这样,我相信您可以转到控制面板中的 Windows 服务并让它在不同的用户下运行。
-
我尝试使用 psexec 并运行命令以作为系统运行。得到了相同的路径。
标签: python jenkins remote-access