Windows 8.1使用SHBrowseForFolder功能无法展开快捷方式

Cannot expand shortcuts using SHBrowseForFolder function in Windows 8.1

本文关键字:快捷方式 功能 使用 SHBrowseForFolder Windows      更新时间:2023-10-16

我有两个cpp GUI应用程序P1和P2。P1有两种开启方式

  1. 通过直接双击或使用命令行
  2. 使用P2的GUI,使用CreateProcess函数(https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx)实现,使用默认标志。

P1有一个文件选择框,它是使用SHBrowseForFolder (https://msdn.microsoft.com/en-us/library/windows/desktop/bb762115(v=vs.85).aspx)实现的,使用默认标志。

在windows 8.1中,文件选择框在"这台电脑"下拉菜单下显示了几个快捷方式(桌面,图片,下载等)。

如果我使用方法1打开P1,这些快捷键扩展得很好。但是,如果我使用方法2,在展开这些快捷方式时,它会在对话框中显示以下错误:

C:Windowssystem32configsystemprofileDesktop指向一个不可用的位置。它可能在这台计算机的硬盘驱动器上,也可能在网络上。检查以确保磁盘已正确插入,或者您已连接到Internet或您的网络,然后再试一次。如果仍然无法定位,则信息可能已移动到其他位置

请帮帮我。这两天都困在这里了

编辑:刚刚发现以下内容。进程P2在启动时由系统级进程打开。如果我关闭P2并以用户身份重新打开它,错误就消失了,文件选择工作正常。

找到问题了。我正在使用带有默认标志的CreateProcess函数创建进程。其中一个参数是环境块,我将其传递为NULL。因此,新进程将使用父进程环境变量创建。所以在启动时,P2是由系统级进程与系统的环境变量创建的。P2将创建具有相同环境变量的P1。因此,在展开快捷键时,P1将在环境块中查找USERPROFILE变量,该变量将是systemprofile。当我以用户身份打开P2时,环境变量设置正确,快捷方式也可以正确展开。希望这对将来的人有帮助。