【发布时间】:2014-05-16 14:33:01
【问题描述】:
我有一个可执行文件,我可以在 Dev 环境中运行,而该可执行文件不在 Int 环境中运行。当我尝试使用 UNC 路径在 Int 上远程运行 .EXE 时,我收到一条错误消息,指出 .EXE 是 16 位应用程序,无法在 Int 机器上运行。该错误的问题是我构建了 .EXE 并且知道它不是 16 位应用程序。当我尝试运行 SSIS 包以在 Int 上调用 .EXE 时,我没有收到 16 位错误,但 .EXE 没有运行。
我尝试在执行过程任务中对 .EXE 的位置进行硬编码,并使用一个变量来根据我正在运行 SSIS 包的机器动态设置位置。 (两者都在 Dev 中工作,在 Int 中都不工作)我也可以从 Dev 调用 Int 上的 .EXE,这并不奇怪,因为 .EXE 是从 Int 下拉到 Dev。
任何想法为什么 .EXE 将在 Dev 环境而不是 Int 环境中运行?根据我们的系统管理员,环境是相同的。
【问题讨论】:
-
确切的错误是什么?发表它。您是否尝试过直接从命令行通过 UNC 直接运行它?
-
确切的错误是:不支持的 16 位应用程序。由于与 64 位版本的 Windows 不兼容,程序或功能“EXE”无法启动或运行。请联系软件供应商询问是否有 64 位 Windows 兼容版本可用。当 DBA 在服务器上运行它时,他收到以下错误:NTVDM 遇到硬错误。 [执行进程任务] 错误:在“文件路径”执行“EXE”时,进程退出代码为“128”,而预期为“0”。
-
这很神秘。那是两条消息,说它是 16 位。当你在 DEV 上运行它时,它会启动 NTVDM.exe 进程吗?
-
DBA 说我们无法查看 NTVDM 是否启动,除非它在 Dev 上失败。该应用程序不是 16 位的。它是使用 VS2010 开发的,在 64 位机器上使用 .NET 4.0。这是一个简单的控制台应用程序,它调用 API 并创建行为扩展来获取限时服务密钥,然后通过 API 启动任务。
-
我不太明白你的反应 - 你见过 NTVDM.exe 吗?像这样排除故障很困难,我不是专家,但有人认为它是 16 位的。我假设您在编译时使用了适当的目标架构,并且您使用的 API 中没有任何奇怪的东西?
标签: c# ssis cmd migration robocopy