【问题标题】:Launch a program from ASP.NET C#从 ASP.NET C# 启动程序
【发布时间】:2012-11-11 08:57:26
【问题描述】:

我有一个程序(我创建的),我想在网页加载时在服务器上启动它。

这是我的代码

public partial class _Default : System.Web.UI.Page
{
    Process app = new Process();
    protected void Page_Load(object sender, EventArgs e)
    {
        app.StartInfo.FileName = @"D:/Path to /My/Program to be run.exe";
        app.Start();
    }
}

现在应用程序正在“运行”,但它会立即崩溃。 如果我只是运行应用程序(通过双击 exe)它运行并且一切都很好。

有人看看我是不是遗漏了什么?

【问题讨论】:

  • 崩溃时是否有任何错误信息?
  • “{应用程序名称} 已停止工作。Windows 正在检查问题的解决方案”
  • @John,这是使应用程序真正运行的最后努力。我不知道,我一直在阅读教程并盯着我的旧 ASP.NET 书并到处乱搞。在发布示例代码之前忘记删除它。
  • 事件日志中有任何关于错误的内容吗?
  • 您使用的是 ASP NET 开发服务器吗?

标签: c# asp.net process


【解决方案1】:

您可以使用 ProcessStartInfo。

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"D:/Path to /My/Program to be run.exe";
psi.WorkingDirectory = IO.Path.GetDirectoryName(psi.FileName);
Diagnostics.Process.Start(psi);

【讨论】:

  • 他已经这样做了,这就是他的app.StartInfo.FileName = @"..."; 行。
  • 成功了!这行得通。但是为什么必须以这种方式调用它?真正的区别是什么(所以我实际上是在学习一些东西,而不仅仅是复制粘贴你的答案)
  • 这可能是因为您在 Page_Load 之外定义了您的 Process 变量,或者因为您忘记了 CWD。​​span>
  • @SpikeX,当我实现这个解决方案时,我将 psi 的声明移到 Page_Load 之外,但是我确实忘记了工作目录..
  • 很好地定义了 WorkingDirectory 解决了我的问题,应用程序现在启动没有任何错误。
【解决方案2】:

听起来您尝试运行的应用程序具有用户界面。如果您打算使用 ASP.NET 应用程序池帐户在服务器上运行它,那么如果您将应用程序设计为控制台应用程序并保护对外部资源(如 HMI 设备)的所有访问,则问题会更少记录的异常。

【讨论】:

  • 我最终会将应用程序转换为控制台应用程序。我对 ASP.NET 以及它如何与背后的代码交互是完全陌生的。我目前正在深入阅读一些 ASP.NET 书籍,学习缓慢。
【解决方案3】:

这是一个安全问题。从 bin 文件夹外运行任何 exe 都会构成安全威胁。您必须在 bin 文件夹中复制您尝试运行的 exe。

【讨论】:

  • 您能否授予对 .NET 应用程序之外的文件夹的访问权限?
【解决方案4】:

这取决于您要运行什么。也许当你从你的 C# 应用程序运行它时,有些东西不见了。您也可能没有从 C# 运行应用程序的正确权限。在不知道要运行什么的情况下,我真的只能这么说。

【讨论】:

  • 我尝试运行的应用程序几乎没有依赖项。这是我编写的一个小型 HMI 应用程序,用于从串行设备读取值并以表格形式显示它们。现在我想从 c#/ASP.NET 网页打开应用程序,从连接到服务器的串行设备读取值,将数据存储在 db 或平面文件中,并允许用户现在或在以后的日期。
  • 为此,我建议您使用Windows服务启动程序:这样HMI可以将数据存储在数据库中,以后在任何应用程序中,您都可以显示按排序的数据插入日期时间或类似的东西。
【解决方案5】:

你有没有在 Javascript 中尝试过这样的事情:-

var shell = new ActiveXObject("Shell.Application");
var appExe =  @"D:/Path to /My/Program to be run.exe";
shell.ShellExecute(appExe , "", "", "open", "1");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多