如何在用C编写的CGI应用程序中使用系统命令执行批处理脚本,通过web浏览器(Apache服务器)执行

如何在用C编写的CGI应用程序中使用系统命令执行批处理脚本,通过web浏览器(Apache服务器)执行,c,windows,apache,batch-file,cgi,C,Windows,Apache,Batch File,Cgi,基本上,我用C编写了一个CGI脚本,其中包含一个system()函数,该函数用于调用EXE所在服务器上的批处理文件。我编写的示例代码如下:- #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { //system("ROBOCOPY \\pdffiles \\\\10.6.202.88\\d$\\pdffiles /mov /ZB /XJ /FFT /MT /R

基本上,我用C编写了一个CGI脚本,其中包含一个system()函数,该函数用于调用EXE所在服务器上的批处理文件。我编写的示例代码如下:-

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    //system("ROBOCOPY \\pdffiles \\\\10.6.202.88\\d$\\pdffiles /mov /ZB /XJ /FFT /MT /R:2 /W:5 /V");

    int t = 0;
    t= system("PDF_MOVE.bat");

    if(t == -1)
        {
            printf("file copy failure");
        }
        else
        {
            printf("file copy successfull");
        }

    return 0;
}

通过将其添加到VistualHost文件或.htaccess文件中,确保允许执行cgi(请参阅:)

AddHandler cgi script.bat#add.exe,如果您愿意
选项+ExecCGI+FollowSymlinks
为什么要使用C程序/.exe来执行批处理文件?这个批处理文件也应该做到这一点(老实说,我没有测试这个):

@echo关闭
echo内容类型:text/html
回声。
调用PDF_MOVE.bat | |转到错误
回显文件复制成功
后藤:EOF
:错误
回显文件复制失败

将cgi添加到VistualHost文件或.htaccess文件中,确保允许cgi执行(请参阅:)

AddHandler cgi script.bat#add.exe,如果您愿意
选项+ExecCGI+FollowSymlinks
为什么要使用C程序/.exe来执行批处理文件?这个批处理文件也应该做到这一点(老实说,我没有测试这个):

@echo关闭
echo内容类型:text/html
回声。
调用PDF_MOVE.bat | |转到错误
回显文件复制成功
后藤:EOF
:错误
回显文件复制失败

我们不知道批处理文件输出的是什么,但是您的C代码缺少一个符合CGI标准的重要内容—HTTP头

您需要输出的最小内容类型是内容类型,因为您不希望输出任何HTML,所以最好是“text/plain”。标题以空行结尾

printf("Content-Type: text/plain\n\n");
如果不这样做,Apache将把您输出的任何内容都视为标头,如果不理解,则返回错误500

在配置方面,需要告诉Apache CGI“脚本”存在于您试图从中运行它的文件夹中,以及它们有什么扩展

Options +ExecCGI
AddHandler cgi-script .exe
如果允许“用户”使用
AllowOverride选项覆盖
Options
指令,则可能需要在
块内的主apache配置中或在“.htaccess”中


可执行文件还需要Apache读取和执行的权限。

我们不知道批处理文件输出的内容,但是您的C代码缺少一个符合CGI标准的重要内容—HTTP头

您需要输出的最小内容类型是内容类型,因为您不希望输出任何HTML,所以最好是“text/plain”。标题以空行结尾

printf("Content-Type: text/plain\n\n");
如果不这样做,Apache将把您输出的任何内容都视为标头,如果不理解,则返回错误500

在配置方面,需要告诉Apache CGI“脚本”存在于您试图从中运行它的文件夹中,以及它们有什么扩展

Options +ExecCGI
AddHandler cgi-script .exe
如果允许“用户”使用
AllowOverride选项覆盖
Options
指令,则可能需要在
块内的主apache配置中或在“.htaccess”中


可执行文件还需要Apache读取和执行的权限。

您的(Apache)服务器也在windows上运行吗?@Rick Apache也在windows上运行。您的(Apache)服务器也在windows上运行吗服务器是否也在windows上运行?@Rick Apache也在windows上运行。我使用的是C程序.exe,因为我的实际程序要复杂得多,一旦移动pdf,它必须从新位置选择一个pdf文件并将其附加到电子邮件并发送。上面显示的iv'e程序只是一个基本的测试程序,好的,那么您应该添加
内容类型:
输出,并将
.exe
添加到
AddHandler cgi脚本中。就像@ChrisTurner的答案一样,我使用的是C程序.exe,因为我的实际程序要复杂得多,一旦移动pdf,它就必须从新位置选择一个pdf文件,并将其附加到电子邮件中发送。上面显示的iv'e程序只是一个基本的测试程序,好的,那么您应该添加
内容类型:
输出,并将
.exe
添加到
AddHandler cgi脚本中。比如@ChrisTurner的答案。