客户生气,打击未知的DLL依赖关系

我是一个为客户开发C ++ Windows应用程序的单人展示。 在过去的几个月里,我们一直在运行着与客户机器上缺lessDLL依赖关系相同的问题。 尽pipe我尽了最大的努力,但事情总是出错,我们生气的邮件又回来了。 我的老板和老板的老板对我很生气,客户也不开心。

我希望你们能够帮忙,并就如何获得交付物提供build议/想法。 之前的一些显而易见的:

  1. 我没有testing机器。 也就是说,我无法复制客户环境,也不会尝试在“干净”系统上安装应用程序,以便在发货前了解问题。
  2. 我已经尝试使用depends.exe来追查我的项目依赖于哪些版本的DLL。 我使用我已经能够以这种方式find的可重新分发的代码发运我们的代码。 之后,这是一个愤怒的客户电子邮件等待游戏。
  3. 我可以访问64位机器和32位机器来安装新版本。 它总是在那里工作。
  4. 我需要使用不能注册的第三方DLL(这是错误的地狱。)
  5. 我不应该使用Install Shield,任何其他自动化安装程序或编写安装脚本。
  6. 我提供关于如何安装应用程序的书面说明(解压缩,双击exe文件。)

我厌倦了为这个东西加热。 我错过了什么,我可以做什么? 在雇主的支持下我应该问什么? 我应该如何以他们提供的方式寻求支持?

更新:

虚拟机鱼雷。 他们不希望我花费我所有的时间来设置和拆分客户configuration。 相反,我现在正在与客户合作来获得基本configuration,以便我知道我应该瞄准的确切的机器设置。 如果不符合这个规格,我不再需要关心。 至less有什么地方去了…虽然我仍然喜欢testing机器。

Solutions Collecting From Web of "客户生气,打击未知的DLL依赖关系"

如果您没有测试机器,您是否至少可以使用干净的Windows安装的虚拟机?

你应该放弃。 在你的离职信中,你应该解释为什么这个情况是荒谬的,并且让你和顾客都感到沮丧。 让我们回顾一下你所说的关于你的情况的事情:

我没有测试机器。 也就是说,我无法复制客户环境,也不会尝试在“干净”系统上安装应用程序,以便在发货前了解问题。

没有专业开发公司没有测试安装发布产品。 我们是一个非常小的公司,我们有很多的虚拟机,我们运行测试,并运行我们的安装程序。

我已经尝试使用depends.exe来追查我的项目依赖于哪些版本的DLL。 我使用我已经能够以这种方式找到的可重新分发的代码发运我们的代码。 之后,这是一个愤怒的客户电子邮件等待游戏。

我可以访问64位机器和32位机器来安装新版本。 它总是在那里工作。

这些不是太坏或太奇怪。 奇怪的是,你不知道你使用的是什么DLL,但是除非你维护一个没有记录的遗留系统,否则你的雇主可以做的不多,否则这是他们没有记录任何东西的错。

不幸的是,您已经说过这些系统不是“干净的”,所以很容易丢失成功安装产品的实际步骤。

我需要使用不能注册的第三方DLL(这是错误的地狱。)

有时候是这样的。

我不应该使用Install Shield,任何其他自动化安装程序或编写安装脚本。

我提供关于如何安装应用程序的书面说明(解压缩,双击exe文件。)

这完全是疯了。 客户不能遵循基本的说明。 事实上,你已经被告知不使用安装程序来使客户的生活更轻松几乎肯定是你的问题的原因。 你不能说出他们做了什么。 当你问他们他们会说谎或忘记他们做了什么……如果他们知道开始。 您的雇主已经通过这条法令引起了严重的支持问题,情况很简单,永远不会改善。

把这个与第一个问题联系起来(没有足够的安装测试平台),你的产品肯定会失败。 你的客户应该生气,你也应该如此。 你的雇主创造的情况并不是有利于发展成功的产品。 在这些问题得到解决之前,没有什么可以做的。

我没有测试机器。 也就是说,我无法复制客户环境,也不会尝试在“干净”系统上安装应用程序,以便在发货前捕获陷阱。

这种类型的设置通常永远不会结束。 不管你有多好,你的开发者机器和客户机器之间总会有显着的差异。 一方面,Visual Studio往往会包含一大堆运行时,它可能会使应用程序依赖于任何内容。 设置虚拟机并不是很复杂。 我使用VMWare Workstation模拟各种不同的机器。 唯一的要求是您拥有要在虚拟机上安装的操作系统和程序的许可证。 VMWare提供30天的免费试用,之后我相信189美元。

其他人给你一个大的答案; 这里有几个较小的建议,你可能会发现有用的情况下,你不能采取更大的行动:

  • 列出你的应用程序所依赖的DLL。 如果您不确切知道应用程序依赖于什么,那么如何确保依赖关系可用?
  • 编写一个实用程序,搜索并记录系统上的这些DLL的任何实例,以及DLL版本和系统的路径。 如果用户遇到问题,则此实用程序可能会帮助您解决问题,因为您提到您没有物理或网络访问权限来显示问题。
  • 编写一个除LoadLibrary()什么都不做的实用程序。 可以记录故障,至少您可以轻松地确定客户机器上的问题。

希望能够快速解决常见的问题并做出修复,使其不再成为常见问题,您将不再需要使用这些工具。 但是,直到你处理问题,他们可能会有所帮助。

此外,在一个评论中,你提到这个问题是由Windows系统DLL引起的,因为第三方软件(包括你的)通常无法取代这些问题,所以在现代系统中通常应该引起很少的“DLL地狱”问题。 所有的Windows系统都应该得到MS提供的服务,而MS则相当不错(尽管不一定完美),因为它们能够向后兼容。 如果这些问题导致你的问题,你可能需要发布它们(也许是版本)的DLL的详细信息,以便人们可以更具体地回答,比如可能需要配置以确保Windows安装程序安装DLL。

用这样的方式把它呈现给你的老板:
一台用于测试安装的机器比一个生气的客户,甚至是你的时间,都要便宜得多。

你的一些依赖可以静态链接吗?

你是否在你的安装中包含了特定的DLL?

如果是这样,这是错误的方式去做。 相反,您应该为您的编译器包含MS可再发行组件包。 例如,如果您使用MSVC 8.0 SP1进行编译,您将获得此包并将其安装在您的应用程序中:

Microsoft Visual C ++ 2008 SP1可再发行组件包(x86)

每个MSCV版本(包括SP级别)都有自己的redist包。 确保你的编译器是正确的。

在你放火之后,坐下来和你的老板说服他们,如果你打算假装成软件公司,你必须像一个人一样行事。 获得真正的生产环境。 这不是一个高中编程俱乐部,这是你的生活。

编辑:只是要清楚。 一旦你得到了redist,不要解压到你的机器,然后在你的设置中包含封装的DLL。 相反,请将整个redist安装程序作为安装的子步骤。 先安装redist,然后安装你的代码。

只有审查:你有这个可再发行的包? http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en

这对我有帮助。

你可以问客户VPN访问或类似的东西,所以你可以使用他们的环境。

如果将完整的绝对路径传递给LoadLibrary() ,则只会查找该DLL的确切位置。 你可以用这个来解决你的一些问题。 将您的应用程序所需的所有DLL打包到“lib”文件夹中,并将其与您的程序一起包含在zip文件中。 只要“lib”文件夹与.exe位于同一文件夹中,就可以使用GetCurrentDirectory构建这些库的绝对路径,并确保所加载的库与您在测试软件时使用的库相同。 但是,如果您使用的库无权重新分配,则此方法不是很有用。

我会检查出VMWare。 这是一个非常酷的虚拟机,你也许可以模仿客户的环境。

另外,我会和你的老板说一句话。 他们完全有可能假设你所发货的产品已经被你彻底的测试过了。 所以这可能是一个错误的沟通,我只能跟他谈谈。 如果你的老板不明白你的观点,我绝对会考虑退出,因为如果产品成功的话,他会声称自己不得不“和你说话”,“把你弄直”。 在你的回顾中,他完全有可能认定你不合作或者最差。 所以我最好是谈谈,然后根据你是否应该继续这个公司做出决定。

您确定您正在开发的Windows的版本和服务包与客户机器“相似”吗? 如果没有,请尝试一下。 有时不同的SP是游戏的罪魁祸首。

您可以像所有人一样使用虚拟机,否则您可以获得各种版本和SP的(诺顿)Ghost图像,但是您的企业又必须承担机器的成本。