正常に動作しているプログラムがありますが、プログラムを 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.dll
A) 私が参照している 8 MB のバージョンではないのか、B) 48 kb に「削除」されていないのかについて、何よりも混乱しています。その上で、特に現在のバージョンのいくつかの機能が欠けているプログラムの現在の展開を確認し、そこにある DLL は 48kb サイズであり、この特定の展開は問題なく動作しました。
また、現在 Windows 8 Pro を実行しており、VS2012 で開発していることにも言及する必要があります。導入環境は Windows Server 2008 R2 です。このプログラムは、もともと Windows 8 Ultimate の VS2010 で作成したものです。VS2012 で初めてプロジェクトを開いたとき、アップグレード ダイアログはありませんでした。リストされているすべての OS (WinXP Pro を除く) は x64 です。
これらの問題/出来事を経験した人はいますか? 洞察/ヒント/解決策は大歓迎です。
ありがとうございました!