首页 新闻 会员 周边 捐助

php的调用c#写的console application 失败,求解

0
悬赏园豆:20 [待解决问题]

我在写一个web site ,  里面有一个需求是将上传的ppt,pptx 转换为pdf 。

 

我写了一个简单的命令行程序,c#的,可以通过cmd来调用 完成ppt 到pdf 的转换。

但是我在php中使用system(xxxx)却不能成功执行。

 

现在:

1. 在php 中调用 ping 或者 ipconfig 之类的是没有问题的。

2. 在php 在调用c#命令行程序的时候,一些原本的是能够成功执行的,我看到了console.writeLine输出的内容。只是无法执行office.dll的一些方法。

 

我大胆猜测问题是在于我的c# 调用了office.dll的一些方法,但是这样php system 或者exec 却无法执行....

 

有高手能告诉我解决方案,如果不行,有替代方法完成我这个需求么? 谢谢啦~

binchen的主页 binchen | 初学一级 | 园豆:182
提问于:2012-07-16 19:11
< >
分享
所有回答(2)
0

难道是权限不够吗

chenping2008 | 园豆:9836 (大侠五级) | 2012-07-16 19:26

您好,好像权限是没问题的,因为是可以调用到那个c#命令行的

但是好像没有执行office相关的代码,不知道为什么,问题是也不报错啊

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-16 22:12
0

在php代码中你是如何调用的?

dudu | 园豆:29568 (高人七级) | 2012-07-16 21:37

$run = 'C:\xampp\htdocs\sailisan\swftools\ppt2pdf.exe C:\xampp\htdocs\sailisan\uploads\ppt\190.ppt C:\xampp\htdocs\sailisan\treated_files\13423392245.pdf';
system($run);

 

是这样调用的,我估计这样用没问题 ,因为我使用了swftools 来转换pdf 为swf 是成功的

我估计问题是出在c#那边office的地方,您知道c#这种命令行如果引用dll是不是需要设置什么才能被php 类似system函数调用呢?

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-16 22:11

@binchen: 不通过php,直接在命令行中可以正常运行吗?

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-16 22:12

@dudu: 可以的

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-17 00:17

@binchen: 我可以把那个给您,需要.net framework 4.0 

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-17 00:20

@binchen: 操作office的那部分代码可以贴出来吗?

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-17 08:00

@dudu: 额 格式

       static void convert(string originalPath , string outputPath)
        {
            Microsoft.Office.Interop.PowerPoint.ApplicationClass ac = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
            Presentation p = null;
            Regex r_ppt = new Regex("^*\\.ppt$");
            Match isPpt = r_ppt.Match(originalPath);
            if (isPpt.Success)
            {
                p = ac.Presentations.Open(originalPath, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse);
            }
           
            Regex r_pptx = new Regex("^*\\.pptx$");
            Match isPptx = r_pptx.Match(originalPath);
            if (isPptx.Success)
            {
                p = ac.Presentations.Open2007(originalPath, MsoTriState.msoCTrue, MsoTriState.msoCTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
            }
            if (p == null)
            {
                Console.WriteLine("the input file is not a powerpoint file");
                return;
            }

            p.SaveAs(outputPath, PpSaveAsFileType.ppSaveAsPDF, MsoTriState.msoCTrue);
        }

这个比较清楚, 就是这样的

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-17 20:58

@binchen: outputPath的文件系统权限检查过了吗

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-17 21:27

@dudu: 我是在apache下跑的,好像默认的用户是system ,所以这样的话 权限都是够的

我使用system('pdf2swf xxxxx')这样是能够在那个路径下生产的,我今天同事提点了下说可能是环境变量的问题,您觉得呢?

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-17 21:39

@binchen: 试试用passthru()

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-17 21:53

@dudu: 555 还是不行啊

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-17 22:06

@binchen: 会出现什么错误信息吗?

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-18 08:29

@dudu: 没有...

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-18 10:19

@binchen: 如果不调用Office,有没有问题?

支持(0) 反对(0) dudu | 园豆:29568 (高人七级) | 2012-07-18 10:43

@dudu: 没有的,就是如果不用 office.dll 的东西话,就是c#里面那些什么输出,if else都能执行到的

支持(0) 反对(0) binchen | 园豆:182 (初学一级) | 2012-07-18 11:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册