CodeGuruサイトからOpenSourceコードを使用する場合のバックアップと復元の開始に関する1つの問題について





ある日、Windows 7でバックアップまたは復元を開始する問題に遭遇しました。ユーザーがコンピューターのコントロールパネルで[バックアップまたは復元]タブを選択すると、[バックアップの構成]をクリックすると機能しなくなりました。 タブを検索しないようにするには、プログラムCを実行します。\ Windows \ System32 \ sdclt.exe



Yandex / Googleを介して問題の解決策を見つけても、何にもつながりませんでした。 彼らは問題について多くのことを話しますが、 CompareItアンインストールすることを勧める場合を除き、何が起こっているのか誰も実際には知りません またはPowerISO 。シェルコンテキストメニューを介してエクスプローラーへの埋め込みを誤って処理します。 私たちのケースで同様のプログラムが存在するかどうかを確認し始めましたが、実際、Explorerコンテキストメニューを変更して機能を拡張する便利なユーティリティが最近インストールされたことがわかりました。



このプログラムをアンインストールすると、アーカイブの問題はなくなりました。 私はテクニカルサポートに連絡し、ユーティリティがかなり前に書かれており、Windows 7で動作するように設計されていないことを除いて、わかりやすいことは言えない開発者に切り替えました。 CodeGuru WebサイトのOpenSourceコードを使用しました。



CtxMenu、著作権1999、小動物ソフトウェア

このコードは、無料で変更または制限して配布できます。

このコードはそのまま提供されます。 このコードを任意のアプリケーションで使用する場合、コードのバグはすべてお客様の責任となります。



本当に何が起こっているのですか?



奇妙なことに、脚はCodeGuruのWebサイトから正確に成長します。1999年に、Chris LosingerがContextMenuの使用例を含む彼の記事公開しました 。 上記の問題はCompareItだと思います! PowerISOもこのコードの使用に関連付けられています。



InvokeCommand関数であるShellCtxMenu.cppファイルを詳しく見てみましょう。

STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { // //  skipped // HRESULT hr = NOERROR; if (!HIWORD(lpcmi->lpVerb)) { idCmd = LOWORD(lpcmi->lpVerb); // process it switch (idCmd) { default: case 0: // operation 1 case 1: // operation 2 // //  skipped // break; } // switch on command } return hr; }
      
      







スイッチ内部では、デフォルトのブランチの処理などのケースが同じように発生し、関数の最後に常にNOERRORが返されることがわかります。 これは間違っています。 そして、戻りコードE_INVALIDARGはどこにありますか-idCmdを処理していないことを通知するために使用する必要があります。



コードをこれに変更します。

 STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi) { // //  skipped // HRESULT hr = E_INVALIDARG; if (!HIWORD(lpcmi->lpVerb)) { idCmd = LOWORD(lpcmi->lpVerb); // process it switch (idCmd) { default: goto err_exit; case 0: // operation 1 case 1: // operation 2 // //  skipped // break; } // switch on command hr = NOERROR; } err_exit: return hr; }
      
      







この場合、チームでない場合はE_INVALIDARGを返し、チームが処理された場合はNOERRORを返します。 これらの変更後、バックアップまたは復元ツールは正常に動作し始めました。



Administratorの下でコマンド「regsvr32.exe CtxMenu.Dll」を呼び出して、完成したCtxMenu.Dllファイルを登録する必要があることを思い出してください。



Windows 7の英語版では、バックアップまたは復元ツールである[バックアップの構成]項目は、それぞれバックアップと復元およびセットアップバックアップと呼ばれます。



ご清聴ありがとうございました。



All Articles