RmRegisterResources 関数が失敗してしまう

[戻る]
哲也 2008/12/04(木) 20:31:29
 RmRegisterResources 関数を実行すると、ERROR_INVALID_HANDLE が帰ってきて失敗
してしまいます。
RmStartSession 関数を実行は成功しています。

dwSe は 0 になります。
なぜ失敗するのでしょうか?


 DWORD dwSe = -1
  WCHAR szSessionKey[CCH_RM_SESSION_KEY + 1] = { 0 };
  dwResult = RmStartSession(&dwSe, 0, szSessionKey);
  if (dwResult != ERROR_SUCCESS)
  {
   return dwResult;
  }

 // Register items 
  DWORD nFiles = 2;
  LPCWSTR szFileNames[] = { (LPCWSTR)strIExplorerFileName, (LPCWSTR)
strIEUserFileName };
  dwResult = RmRegisterResources(dwSe, nFiles, szFileNames, 0, NULL, 0, NULL); 
  if (dwResult != ERROR_SUCCESS)
  {
   return dwResult;
  }


開発環境は、 Vista の VS2005 になります。
よろしくおねがいします。

しま 2008/12/05(金) 00:44:28
RmRegisterResouce だとか RmStartSession だとかには詳しくないので
間違ったことを書くかもしれません

>  WCHAR szSessionKey[CCH_RM_SESSION_KEY + 1] = { 0 };
>  dwResult = RmStartSession(&dwSe, 0, szSessionKey);

ということは szSessionKey には有効な文字列は入っていませんね(空だから)
なので、 dwSe には 0 が入るのでしょう(ハンドルは作成しなかった)

オンライン版の MSDN によれば

RmRegisterResource の戻り値が ERROR_INVALID_HANDLE の場合は
「渡したハンドルには Restart Manger session が存在しない」と読める
説明があります

哲也 2008/12/05(金) 01:56:16
お世話になっております。

szSessionKey は RmStartSession を実行すると取得できるものなので
文字列を指定する必要はないと思います。

ちなみに、RmStartSession を実行したときには、数字が入って返ってきます。

aetos 2008/12/05(金) 10:57:16
> LPCWSTR szFileNames[] = { (LPCWSTR)strIExplorerFileName, (LPCWSTR)
> strIEUserFileName };

なぜキャストしているのかが気になるのですが…ファイル名の中身がワイド文字じゃない
ってことは無いですよね?
strIExplorerFileName と strIEUserFileName の宣言はどうなってます?

哲也 2008/12/05(金) 20:17:44
ファイルパスを直接指定するやり方でも試してみましたが、結果は同じでした。

aetos 2008/12/06(土) 16:06:52
いや、ちゃんとワイド文字になってますよね? と。

LPCWSTR szFileNames[] = { L"C:\\〜" }; なら OK です。
LPCWSTR szFileNames[] = { (LPCWSTR)"C:\\〜" }; って書いてあったらダメです。

哲也 2008/12/06(土) 21:22:52
お世話になっております。

ワイド型でやっています。

直接指定した場合も以下のように書いてます。
LPCWSTR szFileNames[] = { L"C:\\〜" };

lng 2008/12/09(火) 14:27:09
UACの問題とかではなく?

哲也 2008/12/10(水) 16:01:42
uacの問題とはなんでしょうか?
実行レベルなども特に関係ないとおもいましたが・・・。

lng 2008/12/11(木) 13:53:16
いや一応言ってみただけです。失礼
こちらでも上のソースを実行してみましたが
dwSeが0で ERROR_INVALID_HANDLE は出ないですね
SDKは最新ですか?

こちらは
Vista VS2005SP1
Microsoft SDKs v6.1
環境で試しました

古いスレッドには追加発言できません。