我有一个只想打开文件的64位控制台应用程序。设置了文件的隐藏属性(文件被隐藏)。以下代码仅在某些机器上失败。 ShellExecuteEx
实际上会返回TRUE
,但.txt文件无法在记事本中打开,并且hProcess
结构的SHELLEXECUTEINFO
成员在通话后仍为零。
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.hWnd = GetConsoleWindow();
sei.lpVerb = _T("open");
sei.nShow = SW_SHOWNORMAL;
sei.lpFile = _T("C:\\some\\existing\\file.txt");
BOOL bRC = ShellExecuteEx(&sei);
MessageBox(GetConsoleWindow(), sei.lpFile, sei.lpVerb, MB_OK);
致电MessageBox
只是为了让ShellExecuteEx
有足够的时间来发挥其魔力。如果满足以下条件中的至少一个条件,则.txt文件将在记事本中打开:
lpVerb
是nullptr
,"openas"
或"properties"
(当然只显示文件的属性),而不是"open"
,{ {1}},甚至是"edit"
(对于.exe而不是.txt)这里发生了什么? Windows资源管理器正确打开隐藏文件,因为它使用空动词,但我必须使用动词(" runas"实际上,但请不要被此信息分心)。它应该与" open"同样。我做错了什么?
答案 0 :(得分:0)
原来问题出在一个Explorer扩展中。具有讽刺意味的是(但不出所料)这是我们自己的延伸。如果未注册扩展名,问题就会消失,.Where("has(store.{param})")
.WithParam("param",region)
将再次适用于所有动词。