本人在VS中用Process打开cmd程序,并传入参数,转换图片,运行成功!
但是放入IIS7.0中,Process打不开cmd程序,程序直接运行过去,无结果,无报错!
开始以为IIS权限不够,便设置了IIS权限,给予管理员权限还是不行,跟踪监视看到Process在start的时候,进程被终止,上网查询无果,望各位大侠指点!
string img = Server.MapPath(@"imageTest\" + "sss.pdf[0]");
string newImg = Server.MapPath(@"image\" + "test.png");
if (File.Exists(newImg))
{
File.Delete(newImg);
}
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.FileName = @"cmd.exe";
startInfo.WindowStyle = ProcessWindowStyle.Maximized;
string strCmd = "/c " + @"convert -quality 100 -antialias -density 96 -transparent white -trim {0} {1} ";
startInfo.Arguments = string.Format(strCmd, img, newImg);
try
{
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch(Exception ex )
{
Response.Write(ex.Message);
}
以上就是我的代码,VS中各种正常,WIN7下,IIS内运行不正常!
应该还是权限问题:IIS启动Worker Process (WP)来处理HTTP请求,所有的ASP.NET代码也是在这个w3wp.exe中执行。所以为了安全性考虑,执行这个exe的时候,采用的用户身份一般是ASPNET或者Network Service(请检查IIS的配置来确认)。这样的用户是缺少很多权限的,例如执行IIS服务器所在电脑上的一些命令,或者访问一些文件夹。所以你如果有特殊的需要要执行这些东西,可以修改IIS配置来改变执行w3wp.exe的身份,或者采用ASP.NET提供的impersenation方式。
我在IIS内部配置使用了Network Service用户,然后将Network Service用户加到管理员组里,运行还是不成功!您说的:"可以修改IIS配置来改变执行w3wp.exe的身份,或者采用ASP.NET提供的impersenation方式"能具体点么,这块没接触过,给个说明也好!感激不尽
@Code男: 请问这个问题你解决了吗?
怎么解决的? 能给点建议吗?感激不尽
我也遇到了同样的问题,有人说修改 machine.config <processModel userName="SYSTEM" enable="true"/>
我发现也不可以;
考配cmd.exe到站点bin文件夹下,我试了也不可以,如果哪位有好的建议,请提出一些博解
请问这个问题是怎么解决的呢,我现在刚好遇到,很头疼
头疼+111111
我也遇到了类似的问题,最后解决方案是:将IIS里面你程序用到的程序池的高级设置中“启用32位应用程序”置为true,“加载用户配置文件”置为true。