尽管 SQL 代理作业状态成功,但通过 SSIS 包进行的批处理或.exe无法提供输出



我创建了一个批处理文件,该文件启动了一个带有多个参数的命令行(IrfanView(。批处理如下所示:

start /wait /d "C:Program Files (x86)IrfanView" i_view32.exe C:Source*.png /advancedbatch /convert=C:Destination*.jpg

基本上,它使用存储在IrfanView的INI中的高级批处理设置将所有PNG从源文件夹转换为JPEG到目标文件夹。

批处理文件位于我的服务器上(与 IrfanView 相同(,手动启动时它可以正常工作。我还尝试使用 SSIS 执行过程任务启动批处理,该任务在手动执行包时也有效。

另一种选择是直接从执行进程任务(因此没有批处理文件(启动 IrfanView,然后手动触发包。每个选项似乎都可以手动工作。

但是,每当我尝试在 SQL 代理中运行批处理 (cmdExec( 或任何包时,它都会成功运行作业,但是......文件夹中没有输出。所以,它不会给出错误,它只是什么都不做。

手动运行时,输出文件将按预期显示在目标文件夹中。通过 SQL 代理运行时,尽管作业已成功运行,但不会显示任何输出文件。

这可能与安全设置有关吗?SQL 代理在具有完全管理员权限的本地用户下运行。
我已经阅读了一些关于凭据和代理的内容,但不确定如何使用它以及它是否会解决问题。

我有另一个作业正在运行,它也调用SSIS包中的可执行文件(7zip(,它工作正常。

如果我使用其他程序,例如命令行中的 Flash 重命名器,则 SQL 作业会保持运行(状态正在进行中(,同时手动触发包或批处理,它可以正常工作。

使用 SQL Server 2008 (BIDS + SSMS(

如何解决这个问题?

命令开始通常将第一个双引号字符串解释为标题字符串。因此,如果任何其他字符串也必须括在双引号中,则必须在双引号中指定标题。

IrfanView 不要求其程序目录是当前工作目录。因此,在我看来,简单地以完整路径启动 IrfanView 会更好。

IrfanView 选项高级批处理需要来自i_view32.ini的数据。在使用其他帐户运行 IrfanView 时,最有可能需要指定包含 i_view32.ini 的文件夹的路径。

i_view32.ini通常存储在 IrfanView 的程序文件目录或目录 "%APPDATA%\IrfanView" 中。

第一个选项通常不再使用,因为Windows x64上的默认程序文件位置"%ProgramFiles(x86(%\IrfanView">

或Windows x86上的"%ProgramFiles%\IrfanView"对于Windows Vista和更高版本的Windows用户默认具有写保护。

因此,i_view32.ini现在默认位于当前用户帐户IrfanView的应用程序数据目录中。

是的,环境变量 APPDATA 包含用户帐户的名称,因此因用户帐户而异。默认情况下,用户 X 无权访问用户 Y 的应用程序数据目录。

因此,在使用不同的帐户运行 IrfanView 时,文件i_view32.ini或包含高级批量转换选项的副本必须位于所有用户帐户或至少已使用帐户可读的文件夹中,并且在命令行上也必须指定此文件夹的路径。

通过总结上述所有信息,您很可能需要

start "Convert PNG to JPEG" /wait "%ProgramFiles(x86)%IrfanViewi_view32.exe" C:Source*.png /advancedbatch /convert=C:Destination*.jpg /ini="Path to folder with i_view32.ini" /cmdexit
但是,如果批处理文件

不包含任何其他命令,因此根本不需要批处理文件,则下面也应该有效。

"%ProgramFiles(x86)%IrfanViewi_view32.exe" C:Source*.png /advancedbatch /convert=C:Destination*.jpg /ini="Path to folder with i_view32.ini" /cmdexit

最新更新