运行程序的条件

时间:2012-10-26 10:37:23

标签: c# permissions exe user-permissions

我在C#中编写了一个主程序,我还在C#中编写了一个小工具程序。

我希望工具程序能够在某些条件下执行:

  • 从我的主程序调用时。
  • 从open打开一些后缀的文件(例如“* .abc”)

但是如果用户打开我的程序目录,他可以运行工具程序,我不希望他能够这样做。我希望他能够在上述条件下运行该程序。如果他手动运行程序,程序会自动关闭。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

没有任何暴露于进程/执行环境的东西告诉它如何调用它,所以没有万无一失的方法来做到这一点。

您可以让命令行中的主程序传递一个标志 - 这个和后缀是您可以检查的内容,如果其中任何一个不存在,您将立即终止。

但是,如果用户猜对该标志,他们仍然可以直接调用该应用程序。

其他机制可能涉及在调用第二个程序之前从主程序向文件写入值,并从第二个程序中检查该文件(并在执行后删除它)作为消息传递机制。还有其他消息机制可以执行类似的操作(例如私有MSMQ队列)。

答案 1 :(得分:2)

要检查主程序是否调用它,您可以将主程序的ProcessID作为命令行参数传递,然后在您的小程序中检查ProcessID是否存在以及其进程名称是否为主程序的名称。这不是欺骗性的,但假冒伪劣可能比传递静态数字/字符串更麻烦。

此外,您可以对数字进行加密并传递,然后解密并检查上述内容。要阻止一个坚定的黑客自己运行你的程序几乎是不可能的,但是你可以提高它是多么棘手的做法。您还需要对代码进行模糊处理,否则快速反射器调用将准确显示正在传递的字符。

或者,如果可能的话,您可以将小程序设为DLL并从主程序中调用它。这需要一些重构,但会强制你的程序打开。至于打开*.abc文件,您的程序可以检查命令行参数以查看是否传递了文件名。然后,您的应用程序可以自动处理,并可以进行DLL调用。

答案 2 :(得分:1)

您可以使用named mutex一些难以猜测的名称来确保主程序调用“小工具”程序。因此,您在父程序中创建一个Mutex:

bool requestInitialOwnership = true;
bool mutexWasCreated;
Mutex m = new Mutex(requestInitialOwnership, 
                        "MyMutex", 
                        out mutexWasCreated);

然后在您的子程序中编写完全相同的代码以检查父程序是否执行它。如果mutexWasCreated==true,则父程序调用 。否则就是这样。 检查传递给程序的参数将有助于确定文件名的扩展名是否为.abs