Vista上でフォルダを開くには?


O_P  2009-02-02 23:23:52  No: 69564

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を使用したいなと思います。

ご教授ください、よろしくお願い致します。


Blue  2009-02-03 00:12:24  No: 69565

再現しません。

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);
}


O_P  2009-02-03 00:25:27  No: 69566

お試し頂き、ありがとうございます!
ただ、Blueさんが書かれたコードをそのままコピペしても、
当環境では再現してしまいます。

環境は、VS2005 SP1/Windows Vista Bus SP1 です。
Service Pack以外に違いはありません。

英語サイトですが、下記でも同じような問題がおこっているみたいです。
解決はしていないようですが。。
<http://newsgroups.cryer.info/borland/public.delphi.nativeapi.win32/200706/0706238281.html>


Blue  2009-02-03 00:53:55  No: 69567

ちなみに管理者として実行したときうまくいきますか?


オショウ  2009-02-03 00:56:19  No: 69568

当方も・・・
Vista Ultimate SP1
VS2008 SP1

開きました!

以上。


オショウ  2009-02-03 00:58:46  No: 69569

管理者権限なしで、開きました・・・
以上。


オショウ  2009-02-03 01:01:51  No: 69570

細かく書いてしまってすいません・・・

VS2005 SP1 でも実験しましたが、管理者権限なしで
開きました。

以上。参考まで


O_P  2009-02-03 01:05:52  No: 69571

管理者で実行してもうまくいきません。
UACの問題ではなさそうです。

==
CString cstrCmdPath = _T("explore /select, C:\\");
WinExec(cstrCmdPath, SW_SHOW);
==

ではうまくいきます。
なぜWinExec()ではうまくいって、ShellExecuteEx() ではダメなのでしょうか?


Blue  2009-02-03 01:20:11  No: 69572

では、ShellExcute,CreateProccess,systemではどうでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加