我有一个旧的 32 位 delphi 应用程序(没有源代码),用作 Windows 服务。它在 windows 2003 32bit 上运行良好。
我不知道它最初是作为服务创建的,还是后来转换为服务的。它应该使用/install
命令行上的标志安装到服务器。
尝试在 Windows 2008 R2 虚拟机上安装它时,我在事件日志中收到 APPCRASH 事件。
该服务应该从远程 SQL Server 实例读取 blob 并将其写入本地 HD。它还从注册表中读取一些初始化数据。
有什么方法可以将此应用程序作为服务安装在 Windows 2008 r2 64bit 上?
如果没有,我可以尝试任何解决方法吗?
你有什么建议?
我们自己编写了很多 Delphi 32 位服务,唯一真正帮助我们“调试”在没有源代码的服务器(包括 64 位)上运行的服务是Sysinternal(现在是 Microsoft Technet)进程监视器。
在您的特定情况下,我会下载 Process Monitor(它是一个简单的可执行文件)并运行它,然后将其设置为仅过滤您的服务的 .exe 应用程序。寻找它的文档,但这实际上是一个非常简单的过滤器。
启动服务时,让进程监视器在两台机器上运行(过滤)。比较 Process Monitor 的结果。我敢打赌,你有一些东西,比如缺少注册表项,或者缺少目录或权限,这会导致 Delphi 应用程序引发异常。这应该很容易在 Process Monitor 上发现。如果您有一台工作机器可以比较,那就更是如此。
我遇到了同样的问题,但是 Ricardo Pardini 对 Process Monitor 的提示是解决方案,我发现该服务(即使在刚刚安装它时)正在寻找一个不在应用程序目录或搜索中的 dbExpress DLL小路。将 DLL 复制到同一文件夹中解决了该问题。
如果无法访问应用程序或无法跟踪它可能崩溃的原因,我只能提供一些可能有帮助的一般性想法。
如果它只是一个 POS(普通旧服务;)),您可以按照http://support.microsoft.com/kb/251192此处的说明手动将其安装为服务。这样,如果应用程序本身正常工作,您将绕过失败的安装例程。
您也可以尝试使用兼容模式运行它。旧的 Delphi 应用程序可以从中受益匪浅。
ms也有几个r2的应用程序兼容性更新,所以如果你还没有点击windows更新和下载。
你也可以在没有 /install 参数的情况下直接运行应用程序吗?
它可能试图从 64 位版本的 windows 而不是 32 位版本的 windows 中读取内容。确保您已安装 32 位 sql server 客户端并正常运行。除了那个帖子 appcrash 应该告诉你在 wow32 中放入哪个 DLL。
我们决定在此期间继续在 32 位操作系统上运行,并在 .NET 中重写这个应用程序......
你没有提到任何关于 UAC 的事情。完全禁用 UAC,然后重试。