【问题标题】:Stop executing main application directly and execute it from the second application?停止直接执行主应用程序并从第二个应用程序执行它?
【发布时间】:2014-02-21 04:59:04
【问题描述】:

我想要的是使用我的小型 LicenseExe 应用程序启动我的主应用程序。

LicenseExe 将检查此系统是否已注册。

如果系统没有注册,LicenseExe 应该退出。 如果系统已经注册,那么LicenseExe会调用ShellExecute或者其他方法来执行主应用exe。

这很容易,我可以做到。

我想要的是,我的主应用程序永远无法通过直接双击其 exe 文件来执行。它只能由 LicenseExe 应用程序执行。是否可以?

这是使我的应用程序获得许可的一种技巧。 所以,请指导我。如何停止直接执行我的主应用程序并使其依赖于我的小型 LicenseExe 应用程序。

主应用程序只能从 LicenseExe 应用程序启动,不能通过双击,甚至不能通过命令行。

我在 Windows 7 平台下使用 C++ Visual Studio 2010。

【问题讨论】:

    标签: c++


    【解决方案1】:

    在主应用程序中,您可以检查启动它的父进程。如果它不是 LicenseExe,那么 mainapp 应该退出。

    参考:How can a Win32 process get the pid of its parent?

    除此之外,licenseExe 可以在启动主应用程序时将句柄或环境变量传递给它。 mainapp 可以验证是否存在此类信息并继续执行,否则退出。

    【讨论】:

    • 另外检查父进程 ID。让父进程创建一个命名事件并等待它,在子进程main中打开命名事件,如果成功则继续执行。
    【解决方案2】:

    您可以将主应用程序替换为动态链接库(DLL)

    DLL可以由LinceseExe随意调用。

    【讨论】:

    • 你确定我能做到吗?它会安全吗?而且DLL不能被任何程序运行?
    • DLL可以通过反汇编工具破解。所以没有绝对的安全。
    【解决方案3】:

    您可以在主应用程序中使用命令行参数。当它启动时检查一组参数,如果它们不存在 - 退出应用程序。然后,在您的 LicenseExe 中,您可以使用只有您知道的给定参数调用应用程序。

    Windows 系统上的示例:

    //main.cpp
    int main(int argc, char* argv[]){
       if(argc==2 && argv[1]=="f20ASD129d0saCZasa"){
          // your normal app-code goes here
       }
       else return 0;
    }
    

    还有 LicenseExe:

    //LicenseExe.cpp
    #include "systemRegisteredTest.h"
    int main(){
       if(systemIsLicensed())
           system("yourMainApp.exe f20ASD129d0saCZasa");
       else return 0;
    }
    

    【讨论】:

    • 这看起来非常合理和有用。如果可能的话,请描述一下这种方法的优点和缺点?它完全安全吗?它可以很容易地破解或类似的东西吗?谢谢。
    • 无论您设置什么安全措施,其他人都可以破坏。你只是想让它变得足够难,他们不会尝试。就我个人而言,我喜欢努力使我的软件变得有用,并且减少对奇怪的盗版的担心。
    • 听@david.pfx - 这是事实。您可以提供的所有解决方案都可以破解。没有优点/缺点。选择你喜欢的那个。如果我真的想以某种方式保护我的应用程序 - 我可能会从这个主题中选择多个解决方案。
    • @PawełStawarz:谢谢。让我稍微扩展一下——您的软件最大的敌人不是盗版,而是默默无闻。如果数以百万计的人盗版您的软件,您应该非常感激,因为迟早您会弄清楚如何从中赚钱。当然,让购买比盗版更容易以鼓励诚实的人,但最大的威胁是没有人使用你的软件,因为没有人知道或没有人关心或太难了。
    • @david.pfx, &PawełStawarz 非常感谢大家。我明白了。我正在使用 Paweł 方法和其他 &Mukt 方法。它工作正常。
    【解决方案4】:

    在 licence.exe [当系统注册时] 创建和锁定互斥锁:CreateMutexEx

    检查主应用程序中的互斥锁。如果互斥锁被锁定,主应用程序应该继续执行。
    否则它应该退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-12
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多