VB.NET在主exe打开时强制'启动'应用程序?

时间:2011-03-14 04:38:30

标签: vb.net

我试图找到一种方法来为我正在处理的程序安装启动器/更新程序。它会让人注册,而不是让他们在没有注册的情况下运行主程序。所以,比方说,我有launcher.exe和main.exe,我打开main.exe。我需要它退出并打开启动器。我打算用套接字做一个简单的ping / pong类型的交易,但是套接字在vb.net中打破了我的脸,因为我只在vb6中使用它们。

对不起文字墙:)

2 个答案:

答案 0 :(得分:1)

我建议使用“秘密”命令行参数。

当Launcher启动Main时,它将执行

C:\Path\Main -Launched

如果用户双击Main.exe(或在DOS提示符下键入“Main”),则不会看到命令行参数。所以在Main中,如果命令行没有-Launched参数,它会启动Launcher然后退出。如果它具有-Launched参数,您可以假设它是由Launcher应用程序启动并继续。


唯一的缺点是黑客可以将Main.exe重命名为Main2.exe,然后安装自己版本的Main.exe,显示命令行,然后启动Main2。这将允许他们看到“秘密”命令行参数。但是,即便是大多数黑客都不会为此烦恼,而非黑客也永远不会看到这个参数。但如果你担心这一点,你可以这样做:

(注意:未经测试,此处可能存在轻微的印刷错误。)

' In Launcher:
' ...
Dim Param as string = Now.ToString("MMddhhmmss").GetHashCode.ToString
' Now launch Main, using Param as the command-line parameter
' ...


' Somewhere in Main, probably in the main form's Form1_Load:
' ...
Dim H As Integer = 0
Integer.TryParse(Command, H)

Dim T As Date = Now
Dim Launched As Boolean = False
For I As Integer = 0 To 30
    Dim X As Integer = T.AddSeconds(-I).ToString("MMddhhmmss").GetHashCode
    If X = H Then
        Launched = True
        Exit For
    End If
Next I

If Not Launched Then
    ' Assume that user launched program directly
    ' Start Launcher, then exit
End If

' The program was started from Launcher. Continue.
' ...

此代码假定当Launcher启动Main时,Main的代码在30秒内开始执行。 (如果证明是错误的,则可能必须增加I循环中的最大值。)

答案 1 :(得分:1)

我会扭转整个事情。而不是启动您的主程序并让它与您的更新程序一起玩切换游戏,将您的“主”图标和程序名称分配给更新程序,并让它在启动时检查并更新真正的主应用程序。然后它将在退出之前启动您的真实应用程序。这样只有一个开关而不是两个。

Savy用户将能够直接找到并运行您的真实.exe文件,但绝大多数文件只是隐藏在程序文件文件夹中的另一个文件。

另一个选择是使您的主程序成为dll(类库项目)而不是.exe文件,并在启动后使用Assembly.LoadFile()函数动态加载它。只要您进入该dll的入口点保持一致,并且使用户更难直接运行主程序而不使用更新程序,这是安全的。

相关问题