2011-03-14 2 views
0

저는 작업중인 프로그램에 대한 시작 프로그램/업데이트 프로그램이있는 방법을 찾아 내려고했습니다. 사람들이 등록하게하고 등록하지 않고 주 프로그램을 실행하게하지 않을 것입니다. 그래서, 나는 launcher.exe와 main.exe를 가지고 있고 main.exe를 엽니 다. 실행기를 종료하고 열어야합니다. 간단한 ping/pong 타입 거래를하기 위해 소켓을 사용할 예정 이었지만, vb.net에서만 사용했기 때문에 소켓이 vb.net에서 내 얼굴을 부수고 있습니다. 텍스트의 벽 : 나는 "비밀"명령 줄 매개 변수를 사용하는 것이 좋습니다 것VB.NET 주 EXE가 열렸을 때 '실행 프로그램'을 강제 실행 하시겠습니까?

+0

그래서 실제 질문은 무엇입니까? –

+0

하하, 내가 이것을 썼을 때 나는 상당히 피곤했다. '런처 (launcher)'앱에서 실행될 때 메인 앱만 실행하는 방법이 있는지 궁금합니다.올바른 방향으로 조금 움직이는 것이 좋습니다 :) – Henzl0l

답변

1

에 대한

죄송합니다. 실행기 홈페이지를 시작하면

, 그것을 실행하는 것

    C:\Path\Main -Launched

경우, 명령 줄 매개 변수 (도스 프롬프트에서 또는 유형 "메인") 사용자 Main.exe를 더블 클릭 보이지 않을거야. 따라서 Main에서 명령 행에 -Launched 매개 변수가 없으면 Launcher를 시작한 다음 종료합니다. 매개 변수가 -Launched이면 실행기 응용 프로그램에 의해 시작되었다고 간주하고 계속할 수 있습니다.


이의 유일한 단점은 해커가 Main2.exe에 Main.exe를 이름을 바꾼 다음 명령 줄을 표시 Main.exe를 자신의 버전을 설치할 수있을 것입니다 다음 메인 2를 시작합니다. 이렇게하면 "비밀"인 명령 줄 매개 변수를 볼 수 있습니다. 대부분의 해커들조차도이 문제에 신경을 쓰지 않으며 해커가 아닌 사람들은 매개 변수를 절대 보지 않습니다. 당신이 걱정하는 경우, 당신은 대신이 작업을 수행 할 수 있습니다

(참고 :. 테스트하지, 여기에 약간의 인쇄상의 오류가있을 수 있습니다)

' 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 루프의 최대 값을 늘려야 할 수도 있습니다.)

+0

그 아이디어를 사용하고 매력처럼 작동합니다. 나는 해커가별로 아쉽지 않으므로 완벽합니다. 만약 내가 걱정했다면, 나는 VB.Net에서 이것을하지 않을 것이다; D 도움에 감사 : – Henzl0l

1

나는 모든 것을 뒤집을 것입니다. 메인 프로그램을 시작하고 업데이트 프로그램으로 게임을 전환시키지 않고 "메인"아이콘과 프로그램 이름을 업데이터에 지정하고 시작시 실제 메인 앱을 확인하고 업데이트하십시오. 그런 다음 종료하기 전에 실제 앱을 시작합니다. 이렇게하면 두 개가 아닌 한 개의 스위치 만 있습니다.

Savy 사용자는 실제 .exe 파일을 직접 찾을 수는 있지만 대다수의 파일은 프로그램 파일 폴더에 숨겨진 다른 파일 일뿐입니다.

또 다른 옵션은 주 프로그램을 .exe 파일 대신 dll (클래스 라이브러리 프로젝트)으로 만들고 Assembly.LoadFile() 함수를 사용하여 시작한 후 동적으로로드하는 것입니다. 이 DLL에 대한 진입 점이 일관성을 유지하는 한 안전하며 사용자가 업데이트 프로그램을 사용하지 않고도 주 프로그램을 직접 실행할 수는 없습니다.

+0

@@ Joel, 나는 DLL 아이디어를 정말 좋아한다. 기본적으로 전체 프로그램은 DLL에있을 수 있으며 .EXE는 업데이트하고 실행하는 것 외에는 아무 것도하지 않습니다. 나는 그 생각을했으면 좋았을 텐데. –

관련 문제