我有2个cpp应用程序P1和P2。P1可以通过两种方式打开。
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,使用默认标志)实现。
在Windows8.1中,文件选择框显示了“此PC”下拉菜单下的几个快捷方式(桌面、图片、下载等)。
如果我使用方法1打开P1,这些快捷键就会展开。但是,如果我使用方法2,在展开这些快捷方式时,它会在对话框中显示以下错误。
C:\Windows\system32\config\systemprofile\Desktop指的是不可用的位置。它可以在这台计算机上的硬盘上,也可以在网络上。检查以确保磁盘已正确插入,或已连接到Internet或网络,然后再试一次。如果仍然无法找到该信息,则该信息可能已移动到另一个位置。
请帮帮伙计们。在过去的两天里被困在这里面。
编辑:刚刚发现以下内容。进程P2在启动时由系统级进程打开。如果我关闭P2并以用户身份重新打开它,错误就消失了,文件选择可以正常工作。
发布于 2015-10-22 18:05:56
发现了问题。我使用带有默认标志的CreateProcess函数创建进程。其中一个参数是环境块,为此我传递了NULL。因此,新进程将使用父进程环境变量创建。因此,在启动过程中,P2是由系统级进程与系统的环境变量一起创建的。Ans P2将使用相同的环境变量创建P1。因此,当展开快捷方式时,P1将在环境块中查找USERPROFILE变量,这将是systemprofile。当我以用户身份打开P2时,环境变量将被正确设置,快捷方式也会适当地展开。希望这对将来的人有帮助。
https://stackoverflow.com/questions/33008339
复制相似问题