VC2005を使用しています。
下記コードですが、指定したフォルダパスを開きます。
XP上では動作していたのですが、Vista上では動作しません。
==ここから==
SHELLEXECUTEINFO sei;
memset( &sei, NULL, sizeof(sei) ); //初期化
sei.cbSize = sizeof(sei);
sei.lpVerb = _T("explore");
sei.lpFile = _T("C:\\test\\"); //開く対象のフォルダパス
sei.nShow = SW_SHOWNORMAL;
BOOL bRet = ShellExecuteEx( &sei ); // !! bRetはTRUEで返ってくるけど、フォルダが開きません。 !!
==ここまで==
WinExecでExploreコマンドを指定すると、何故か成功します。
WinExecは古い関数なので、出来ればShellExecuteExを使用したいなと思います。
ご教授ください、よろしくお願い致します。
再現しません。
VS2005 SP1/Windows Vista Bus(≠SP1)
試したコード
#include "windows.h"
#pragma comment(lib, "shell32")
int main()
{
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei);
sei.lpVerb = TEXT("explore");
sei.lpFile = TEXT("C:\\");
sei.nShow = SW_SHOWNORMAL;
::ShellExecuteEx(&sei);
}
お試し頂き、ありがとうございます!
ただ、Blueさんが書かれたコードをそのままコピペしても、
当環境では再現してしまいます。
環境は、VS2005 SP1/Windows Vista Bus SP1 です。
Service Pack以外に違いはありません。
英語サイトですが、下記でも同じような問題がおこっているみたいです。
解決はしていないようですが。。
<http://newsgroups.cryer.info/borland/public.delphi.nativeapi.win32/200706/0706238281.html>
ちなみに管理者として実行したときうまくいきますか?
当方も・・・
Vista Ultimate SP1
VS2008 SP1
開きました!
以上。
管理者権限なしで、開きました・・・
以上。
細かく書いてしまってすいません・・・
VS2005 SP1 でも実験しましたが、管理者権限なしで
開きました。
以上。参考まで
管理者で実行してもうまくいきません。
UACの問題ではなさそうです。
==
CString cstrCmdPath = _T("explore /select, C:\\");
WinExec(cstrCmdPath, SW_SHOW);
==
ではうまくいきます。
なぜWinExec()ではうまくいって、ShellExecuteEx() ではダメなのでしょうか?
では、ShellExcute,CreateProccess,systemではどうでしょうか?
ツイート | ![]() |