阻止用户关闭通过C#程序打开的应用程序

Pie*_*ces 5 c# command-line fortran embedding

我有一个旧的基于命令行的程序(如果重要的话,它的fortran)是在用户单击按钮时从C#应用程序打开的.如果命令行程序在运行时关闭,则数据会损坏.有没有办法阻止人们在运行时将其关闭?就像让[x]不可用或以某种方式将程序嵌入我的程序?

 System.Diagnostics.Process pname =
 System.Diagnostics.Process.Start(Path.Combine(Application.StartUpPath,
"diag_main.exe"));

    pname.Exited += new EventHandler(pname_Exited);
Run Code Online (Sandbox Code Playgroud)

注意:我希望仍然可以看到应用程序正在运行,并且它在完成时自行关闭,我只是不能让人们在运行过程中将其杀死.

Lor*_*tel 2

一个需要大量编程但可以完成的解决方案:

编写一个单独的程序来拦截程序的屏幕输出并以某种方式将其发送到您的程序。在隐藏窗口中运行该程序,它会转身运行该应用程序并将输出发送到您的程序。

至少拦截器的某些部分几乎肯定需要组装。

编辑:即使程序只写入,重定向标准输出也不会执行此操作 - 他希望显示输出。

可能需要拦截三件事:

Int 21h 文件系统写入。这些是可以通过重定向标准输出来拦截的东西。请注意,某些程序可能会写入实际代表 stdout 文件的不同句柄号 - 在程序的句柄表中查找正在写入的句柄,并将其与 stdout 条目(IIRC 第二个条目)进行比较 - 如果它们匹配它实际上是屏幕输出。

第二级是 IIRC int 10h。有几个子调用必须被拦截。

最后,程序可以直接进行屏幕写入。拦截这些将是一个很大的痛苦,我什至不会考虑尝试它(你基本上必须重写 dos 框。) 相反,经常将屏幕内存与保存的副本进行比较以查找更改。

在所有三种情况下,至少部分例程必须用汇编语言编写。

我已经完成了第一个,玩了一下第二个,但后来我发现我可以不做它。我从来没有尝试过第三种。