0

正常に動作しているプログラムがありますが、プログラムを ini からロードする方法を少し変更すると、zip 機能が動作しなくなります。プログラムをステップ実行したところ、次の行でエラーが発生していることがわかりました。

    var fs = File.Create(zipPath);
    fs.Write(emptyZip, 0, emptyZip.Length);
    fs.Flush();
    fs.Close();
    var sc = new Shell32.ShellClass();
    var srcFlder = sc.NameSpace(program.Path); //THIS LINE
    var destFlder = sc.NameSpace(zipPath);
    var items = srcFlder.Items();
    destFlder.CopyHere(items, 20);
    System.Threading.Thread.Sleep(500);
    ZippedPrograms.Add(zipPath);

program.Pathに送信される変数などを再確認しましたShellClass()が、null または空ではありません。これは、プログラムがこの行に到達したときにポップアップする実際のエラーです。

ここに画像の説明を入力

グーグルで調べてみるとShell32.dll、プログラムで参照したものが7(またはサーバー2008、ターゲット環境)で正しく機能しないことがわかり、代わりにXPバージョンを参照する必要がありました(52kb対48kbのdllサイズ)。この情報を見つけたリンクの 1 つ: click me .

そこで、仮想マシンを作成し、そこに WinXP Professional をインストールし、そこにある に移動してホスト コンピュータにC:\WINDOWS\system32\コピーしました。Shell32.dll奇妙なことに、DLL のサイズは、予想していた 52kb ではなく 8mb までです。VS2012 からリソースとして追加すると、コピーしたファイルを参照して (コピー ローカルで) 追加しますが、何らかの理由でサイズが 48kb になり、上記の行でプログラムがクラッシュし続けます。

DotNetZip を他の C# ライブラリと一緒に zip 管理に使用しようとしましたが、何らかの理由で正しく動作しません (破損した ZIP ファイルを作成する、まったく作成しない、ランダムなファイル/フォルダーをアーカイブに追加することを拒否するなど)。この問題が発生する前は、プログラムは問題なく動作していたので、なぜ突然動作しなくなったのか、Shell32.dllA) 私が参照している 8 MB のバージョンではないのか、B) 48 kb に「削除」されていないのかについて、何よりも混乱しています。その上で、特に現在のバージョンのいくつかの機能が欠けているプログラムの現在の展開を確認し、そこにある DLL は 48kb サイズであり、この特定の展開は問題なく動作しました。

また、現在 Windows 8 Pro を実行しており、VS2012 で開発していることにも言及する必要があります。導入環境は Windows Server 2008 R2 です。このプログラムは、もともと Windows 8 Ultimate の VS2010 で作成したものです。VS2012 で初めてプロジェクトを開いたとき、アップグレード ダイアログはありませんでした。リストされているすべての OS (WinXP Pro を除く) は x64 です。

これらの問題/出来事を経験した人はいますか? 洞察/ヒント/解決策は大歓迎です。

ありがとうございました!

4

1 に答える 1

0

古いシステム dll を新しいバージョンの Windows にドラッグすることは、特にそれが (この場合のように) COM 相互運用 DLL である場合、失敗するに決まっています。Windows 8 が COM サービスを実行している場合、それは「独自の」バージョンの DLL で実行されます。その後、別のバージョンのインターフェイス DLL を使用して対話しようとすると、インターフェイスの不一致が発生します。ご覧のとおり、E_NOINTERFACE.

バージョン 6 の DLL を使用して、バージョン 8 のサービスと通信しようとしています。問題が発生することは間違いありません。

サイズの違いは、すべての実装を含めるのではなく、Visual Studio が展開 DLL をインターフェイスだけに取り除いたことに関係している可能性があります。

于 2013-01-17T04:29:34.967 に答える