【发布时间】:2009-12-04 14:23:42
【问题描述】:
这是来自类库的代码:
proc.StartInfo = new ProcessStartInfo(CmdPath, "+an -b"); proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.UseShellExecute = false; proc.Start(); proc.WaitForExit();当从控制台测试应用程序调用时,这完全符合我的预期。当我使用同一个库并从 ASP .NET Web 服务调用该方法时,它就会挂起。
我在这里缺少什么,也许是权限? ASPNET 服务可以访问 EXE 所在的文件夹,我看到它在任务管理器中运行,尽管它什么也没做。
如果有人能告诉我我做错了什么,我将不胜感激。谢谢。
编辑:抱歉信息不足。 CmdPath 转到我们的调度软件的命令行界面。我正在根据他们提供的文档传递命令。我有一种获取作业列表的方法,以及另一种运行作业的方法。 ...嗯的想法。客户端通常使用 Active Directory 登录,我认为模拟是必要的。现在去测试。
编辑 2:好的,现在客户端遇到了 AccessViolation 问题。这显然是一个权限问题。如果软件使用集成的 AD 授权,并且我冒充我的 AD 帐户,这就足够了吗?我正在使用 web.config 中的标签进行模拟。
【问题讨论】:
-
您没有指定 CmdPath 的作用——如果它要求用户输入,它会在那里等待很长时间!尝试使用 Process Explorer 查看该外部进程中实际运行的内容。
-
对于您的 Edit2:通常在这种情况下,我看到人们只为需要此访问权限的呼叫模拟身份,显然呼叫者提供的所有 Windows 身份都无法访问您的服务器,所以理想情况下,您只想模拟调用您的 exe 而不是在 web.config 级别模拟 - 请参阅:blogs.msdn.com/shawnfa/archive/2005/03/21/400088.aspx - 不模拟运行 - 仅对启动进程的代码块使用模拟然后去恢复正常。
-
@bnkdev:我很快实现了这一点,并尝试使用 INTERACTIVE 调用库。仍然收到 AccessViolation 错误。此时,它可能是我试图调用的程序。使用模拟令牌向 AD 进行身份验证是否存在陷阱?
-
@bnkdev:这让我回到了第一轮——只是无限期地挂起。这个过程通常只需要几秒钟。
-
好吧,让我看看其中一位开发人员在内部编写的一些代码,我 99% 确定他正在做你正在做的事情,尽管我们都建议他不要这样做,他没有办法。
标签: c# .net asp.net web-services