【发布时间】:2013-03-12 21:44:24
【问题描述】:
我有一个运行良好的程序,但是当我对程序从其 ini 加载的方式进行小幅更改时,压缩功能停止工作。我逐步浏览了程序,发现错误发生在以下行:
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() 的变量,它们不为空或为空。这是程序到达这一行时弹出的实际错误:
做一些谷歌搜索,我发现我在程序中引用的 Shell32.dll 显然不适用于 7(或服务器 2008,目标环境),我需要引用 XP 版本(52kb 与 48kb dll尺寸)。我找到此信息的链接之一:click me。
所以我创建了一个虚拟机并在其上安装了 WinXP Professional,然后导航到 C:\WINDOWS\system32\ 并将位于那里的 Shell32.dll 复制到我的主机上。奇怪的是,DLL 的大小约为 8mb,而不是我预期的 52kb。当我将它作为 VS2012 的资源添加时,我浏览到复制的文件并添加它(使用本地复制),但由于某种原因,它最终大小为 48kb,并且程序继续在上述行崩溃。
我曾尝试使用 DotNetZip 和其他 C# 库进行 zip 管理,但由于某种原因,它们无法正常工作(创建损坏的 ZIP 文件,根本不创建它们,拒绝将随机文件/文件夹添加到存档等) .在这个问题之前,该程序运行完美,所以最让我困惑的是为什么它突然不起作用以及为什么 Shell32.dll 不是 A)我引用的 8mb 版本,以及 B)“精简”到 48kb。最重要的是,我检查了该程序的当前部署,其中缺少当前版本的某些功能等,并且那里的 DLL 大小为 48kb,并且此特定部署没有问题。
我还应该提到我目前正在运行 Windows 8 Pro,并在 VS2012 中进行开发。部署环境为 Windows Server 2008 R2。我最初在 Windows 8 Ultimate 上的 VS2010 中编写了这个程序。 VS2012第一次打开项目时,出现no升级对话框。列出的所有操作系统(WinXP Pro 除外)都是 x64。
有没有人遇到过这些问题/事件?任何见解/提示/解决方案将不胜感激。
谢谢!
【问题讨论】:
标签: c#