none
C# Win32ExceptionSystem.ComponentModel.Win32Exception (0x80004005): 拒绝访问。 RRS feed

  • 问题

  • 错误信息为:

    Win32ExceptionSystem.ComponentModel.Win32Exception (0x80004005): 拒绝访问。
       at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
       at System.Diagnostics.Process.Start()

    本地,和测试服务器都正常,本地系统为win8,测试服务器为windows server 2008 r2 sp1。服务器为:Windows Server 2008 r2 Enterprise。

    实现功能:通过pdf2swf软件将pdf转换为swf格式文件。

    代码为:通过日志确定代码在pc.Start()处报的错。

    public static String Document2SWFBySwftools(String pdfPath, String swfPath)
            {
                String result = String.Empty;
                String ToolPath = System.Configuration.ConfigurationManager.AppSettings["SwfInstallDir"];
                try
                {
                    Process pc = new Process();
                    ProcessStartInfo psi = new ProcessStartInfo(ToolPath, String.Format(@"""{0}"" -o ""{1}"" -s flashversion=9 -G", pdfPath, swfPath));
                    //ProcessStartInfo psi = new ProcessStartInfo(ToolPath, String.Format(@" {0} -o {1} -s flashversion=9 languagedir=C:\xpdf\chinese-simplified", pdfPath, swfPath));
                    //ProcessStartInfo psi = new ProcessStartInfo(ToolPath, String.Format(@" -o {1} -t {0} -s languagedir=C:\xpdf\chinese-simplified", pdfPath, swfPath));
                    psi.UseShellExecute = false;
                    psi.RedirectStandardOutput = true;
                    pc.StartInfo = psi;
                    pc.Start();
    
                    using (StreamReader sr = pc.StandardOutput)
                    {
                        result = sr.ReadToEnd();
                    }
                    pc.WaitForExit();
                }
                catch (Exception e)
                {
                    throw e;
                }
                return result;
            }

    网上试了很多种都没效果,文件夹权限都是everyone。
    实在找不到解决方案了,求大神们指点,急在线等,谢谢了。

    还有csdn上面说:

    Process.Start 方法平台为:

    Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

    最后这句:Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)是只支持Windows Server 2008 R2 sp1以及以上版本还是怎么什么,没理解。服务器是Windows Server 2008 r2 Enterprise不支持吗?

    但是我做了测试:

    测试代码:

    static void Main(string[] args)
            {
                try
                {
                    //Process.Start("explorer.exe", "C:\\Program Files (x86)\\SWFTools\\gpdf2swf.exe");
                    System.Diagnostics.Process process = new System.Diagnostics.Process();
                    process.StartInfo.FileName = "iexplore.exe";   //IE浏览器,可以更换
                    process.StartInfo.Arguments = "http://www.baidu.com";
                    process.Start();
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine("系统错误:" + ex.Message);
                }
                Console.ReadKey();
            }

    这段代码能正常执行,并能打开IE,打开百度。


    • 已编辑 manyi213 2014年7月31日 5:51
    2014年7月31日 3:58

答案

  • 对,本地是正常的,在IIS下标识为network service,试过在管理员权限下执行。

    1.配置是一个完整的物理路径。

    2.asp.net应用下,桌面应用和控制台应用同样的代码都是正常的。

    谢谢您的回答,我最后采用:用wcf执行将pdf转化为swf的操作。在asp.net应用调用wcf解决的。

    wcf估计比asp.net应用的权限要高点吧。具体到底哪的权限不对也没找到。

    • 已标记为答案 manyi213 2014年8月1日 8:33
    2014年8月1日 8:33

全部回复

  • 你好:

    你的意思是本地是正常的,但是服务器报这个异常是吧?请问你的服务器上运行在哪个账户下面?有没有尝试过用管理员权限执行一下看看?

    1. 如果SwfInstallDir对应的配置为一个文件夹路径而不是应用程序完整的物理路就有可能抛出这个异常,所以先检查一下配置信息是否正确。

    2. 另外你上面抛异常的代码是运行在什么程序下面的?是桌面应用还是ASP.NET应用?

    如果是运行在IIS下面的ASP.NET应用的话你需要将对应的Application Pool指定一个可以执行该程序的账户,参考:

    http://technet.microsoft.com/zh-cn/library/cc771170(WS.10).aspx


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年8月1日 7:50
    版主
  • 对,本地是正常的,在IIS下标识为network service,试过在管理员权限下执行。

    1.配置是一个完整的物理路径。

    2.asp.net应用下,桌面应用和控制台应用同样的代码都是正常的。

    谢谢您的回答,我最后采用:用wcf执行将pdf转化为swf的操作。在asp.net应用调用wcf解决的。

    wcf估计比asp.net应用的权限要高点吧。具体到底哪的权限不对也没找到。

    • 已标记为答案 manyi213 2014年8月1日 8:33
    2014年8月1日 8:33