Windows 8.1使用SHBrowseForFolder功能无法展开快捷方式
Cannot expand shortcuts using SHBrowseForFolder function in Windows 8.1
我有两个cpp GUI应用程序P1和P2。P1有两种开启方式
- 通过直接双击或使用命令行
- 使用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时,环境变量设置正确,快捷方式也可以正确展开。希望这对将来的人有帮助。
- 如何在c++中为模板函数实例创建快捷方式
- C++ ->运算符 [] 的快捷方式
- C++结构模板变量快捷方式定义不起作用
- 用于基于成员字段或函数创建比较器的快捷方式
- c++ Visual Studio 2015 快捷方式,用于从选择代码中生成功能
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- Qt全局快捷方式扩展劫持快捷方式
- 在Qt Creator中应用代码更改的快捷方式是什么?
- 是否有快捷方式重叠运算符?
- 使用 C++ 显示 (.lnk) 快捷方式文件的真实路径
- 一个按钮有两个或多个快捷方式
- 通过TranslateAccelerator检测快捷方式时,忽略Shift键的状态
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- QDIR入口列表可以使用文件夹快捷方式透明地工作
- 快捷方式在C 中编写自定义编译命令时
- 自动热键:重新映射 MS Visio 的快捷方式,以将手动选择的对象对齐到顶部(好像按:"AlignTop")
- 如何为 QT Windows 应用程序设置不同的桌面快捷方式图标和任务栏图标不同
- 为什么 cppreference 将type_traits xxx_v快捷方式定义为内联 constexpr,而不仅仅是
- 具有OFN_ALLOWMULTISELECT不正确的快捷方式结果的 CFileDialog
- Windows 8.1使用SHBrowseForFolder功能无法展开快捷方式