Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使程序从另一个程序以独占方式可执行_C# - Fatal编程技术网

C# 使程序从另一个程序以独占方式可执行

C# 使程序从另一个程序以独占方式可执行,c#,C#,我想为一个单独的exe创建一个启动程序。我需要主程序(而不是启动程序)在启动程序之外不可访问。基本上不可能安全地执行此操作。启动器可以做的任何事情,用户也可以做 通过让启动器将加密签名的时间戳传递给单独的程序,可以让用户更难操作。但是,用户可以从启动器中提取私钥并手动签署时间戳 您可以让程序检查其父PID,并确保launcher EXE使用您自己的私钥签名,但用户可以修改程序以删除该检查 您还可以使用启动器调用的方法将EXE转换为DLL,但用户可以编写自己的EXE,也可以调用该方法。基本上不可能

我想为一个单独的exe创建一个启动程序。我需要主程序(而不是启动程序)在启动程序之外不可访问。

基本上不可能安全地执行此操作。启动器可以做的任何事情,用户也可以做

通过让启动器将加密签名的时间戳传递给单独的程序,可以让用户更难操作。但是,用户可以从启动器中提取私钥并手动签署时间戳

您可以让程序检查其父PID,并确保launcher EXE使用您自己的私钥签名,但用户可以修改程序以删除该检查


您还可以使用启动器调用的方法将EXE转换为DLL,但用户可以编写自己的EXE,也可以调用该方法。

基本上不可能安全地执行此操作。启动器可以做的任何事情,用户也可以做

通过让启动器将加密签名的时间戳传递给单独的程序,可以让用户更难操作。但是,用户可以从启动器中提取私钥并手动签署时间戳

您可以让程序检查其父PID,并确保launcher EXE使用您自己的私钥签名,但用户可以修改程序以删除该检查


您还可以使用启动器调用的方法将EXE转换为DLL,但用户可以编写自己的EXE,也可以调用该方法。

一个选项是在运行第二个程序时需要参数,尽管这很容易被利用。你没有说这是干什么用的,所以它可能足够好了

根据启动程序的功能,您可以检查这些操作是否已完成,如果未完成,请退出程序


如果需要特别安全,可以设置一些私有公钥系统,并加密动态信息(如时间戳)。老实说,我认为这将是更多的工作比它的价值,而且它仍然是可以利用的,如果任何一个程序进行反汇编。

一个选项是在运行第二个程序时需要一个参数,尽管这是很容易利用的。你没有说这是干什么用的,所以它可能足够好了

根据启动程序的功能,您可以检查这些操作是否已完成,如果未完成,请退出程序


如果需要特别安全,可以设置一些私有公钥系统,并加密动态信息(如时间戳)。老实说,我认为这将是一项超出其价值的工作,如果其中任何一个程序被反汇编,它仍然可以被利用。

您可能希望将主要功能实现为一个单独的DLL文件,并从启动应用程序调用它。
这就是为什么主要功能不完全是一个单独的应用程序,因此它可能不是您想要的,但它是分开的,需要运行另一个应用程序(启动器)。

您可能希望将主要功能实现为一个单独的DLL文件,并从启动应用程序调用它。
这就是主要功能不是完全独立的应用程序的方式,因此它可能不是您想要的,但它是独立的,需要运行另一个应用程序(启动器)。

适当的解决方案完全取决于您试图阻止的内容

如果你的目标是“在任何情况下,熟练的黑客都不能启动B.exe,除非通过a.exe”,这是很难实现的


如果您的目标是“我不希望用户意外启动B.exe,因为A.exe是他们应该使用的”,那么有一些选项。例如,将命令行参数从a.exe传递到B.exe,而普通用户不知道如何传递该参数。

适当的解决方案取决于您试图阻止的内容

如果你的目标是“在任何情况下,熟练的黑客都不能启动B.exe,除非通过a.exe”,这是很难实现的


如果您的目标是“我不希望用户意外启动B.exe,因为A.exe是他们应该使用的”,那么有一些选项。例如,将一个命令行参数从a.exe传递到B.exe,一般用户不知道如何传递。我有两个建议来实现您的目标

  • 第二个exe实际上需要是exe吗?你能改用图书馆电话吗?将该功能作为在launchers进程下运行的线程调用

  • 使用未发布的命令行参数。如果未提供,则终止第二个exe。这并不完全安全,但我相信这就是现代游戏发射器的工作原理


  • 归根结底,我认为如果没有“默默无闻的安全”,就没有办法做到这一点。

    我有两个建议来实现你的愿望

  • 第二个exe实际上需要是exe吗?你能改用图书馆电话吗?将该功能作为在launchers进程下运行的线程调用

  • 使用未发布的命令行参数。如果未提供,则终止第二个exe。这并不完全安全,但我相信这就是现代游戏发射器的工作原理


  • 最后,我认为如果没有“通过模糊实现安全性”,就没有办法做到这一点。

    您可以在启动器中创建一个名称为Guid的互斥体。然后检查程序中的互斥锁。正如其他人所说,这不是很安全,但会阻止大多数人直接启动程序。

    您可以在启动器中创建一个名称为Guid的互斥体。然后检查程序中的互斥锁。正如其他人所说,这不是很安全,但会阻止大多数人直接启动该计划。

    你想实现什么?它将帮助我们帮助你。你想实现什么?他会的