Thursday 1 February 2018

Vb net waitforexit가 작동하지 않습니다


Visual Basic에서 Process. Start를 사용하는 방법.
VB 코드를 사용하여 다른 응용 프로그램을 시작해야 할 때.
Process 객체의 Start 메소드는 프로그래머가 사용할 수있는 가장 저평가 된 툴 중 하나 일 수 있습니다. 메소드로서, Start는 일련의 과부하를 가지고 있는데, 이것은 메소드가 무엇을하는지 정확하게 결정하는 매개 변수 집합입니다. 오버로드를 사용하면 시작할 때 다른 프로세스로 전달할 수있는 모든 매개 변수 집합을 지정할 수 있습니다.
Process. Start로 수행 할 수있는 작업은 실제로 사용할 수있는 프로세스에 의해서만 제한됩니다.
텍스트 기반의 ReadMe 파일을 메모장에 표시하려면 다음과 같이 쉽게 수행 할 수 있습니다.
여기서는 ReadMe 파일이 프로그램과 동일한 폴더에 있고 메모장이. txt 파일 유형의 기본 응용 프로그램이고 시스템 환경 경로에 있다고 가정합니다.
Process. Start는 VB6의 Shell 명령과 유사합니다.
Visual Basic 6에 익숙한 프로그래머의 경우 Process. Start는 VB 6 Shell 명령과 다소 비슷합니다. VB 6에서는 다음과 같은 것을 사용합니다.
Process. Start를 사용하여.
이 코드를 사용하여 메모장 최대화를 시작하고보다 정확한 제어에 사용할 수있는 ProcessStartInfo 개체를 만들 수 있습니다.
숨겨진 프로세스 시작.
숨겨진 프로세스를 시작할 수도 있습니다.
그러나 조심하십시오. 프로세스를 끝내기 위해 더 많은 코드를 추가하지 않는 한, 작업 관리자에서 코드를 종료해야 할 것입니다. 숨겨진 프로세스는 일반적으로 모든 종류의 사용자 인터페이스가없는 프로세스에서만 사용됩니다.
프로세스 이름 검색.
Process로 작업하기. 객체로 시작하면 많은 기능을 제공합니다. 예를 들어, 시작된 프로세스 이름을 검색 할 수 있습니다. 이 코드는 & # 34; notepad & # 34; 출력 창에서 :
이것은 비동기 적으로 새 응용 프로그램을 시작했기 때문에 VB6 Shell 명령으로 수행 할 수없는 작업이었습니다. WaitForExit을 사용하면 비동기 적으로 실행해야 할 경우 새 스레드에서 프로세스를 시작해야하기 때문에 역으로 문제가 발생할 수 있습니다. 예를 들어, 프로세스가 시작되고 WaitForExit가 실행 된 양식에서 구성 요소가 활성 상태로 유지되어야하는 경우. 일반적으로 이러한 구성 요소는 활성화되지 않습니다. 코드를 작성하여 직접 확인하십시오.
프로세스를 강제 종료하는 한 가지 방법은 Kill 메서드를 사용하는 것입니다.
이 코드는 10 초 동안 기다린 다음 프로세스를 종료합니다.
오류가 발생하지 않도록 프로세스가 종료되도록하려면 강제 지연이 필요하다는 것을 알았습니다.
대부분의 경우 프로세스가 사용하는 리소스를 해제하기 위해 처리를 사용하기 블록에 두는 것이 좋습니다.
이 모든 작업을보다 쉽게 ​​수행 할 수 있도록 프로젝트에 추가 할 수있는 Process 구성 요소도 있으므로 실행 시간 대신 디자인 타임에 위와 같은 많은 작업을 수행 할 수 있습니다.
이렇게하면 프로세스가 종료 된 이벤트와 같이 프로세스에서 발생하는 이벤트를 코딩하는 것이 훨씬 쉬워집니다. 다음과 같은 코드를 사용하여 핸들러를 추가 할 수도 있습니다.
그러나 단순히 구성 요소에 대한 이벤트를 선택하는 것이 훨씬 쉽습니다.

Vb waitforexit 작동하지 않음
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
WaitforExit이 제대로 작동하지 않습니다.
그래서 나는 잠시 동안이 문제에 대해 싸워 왔으며 그것을 해결하기위한 여러 가지 방법을 시도했지만 그렇게 할 수는 없었습니다.
Bascally waht 내 애플 리케이션은 자바 파일을 호출하여 디바이스에 애플리케이션을로드한다. 로드하는 동안 그것을 richtext 상자에 인쇄하고, 다음 파일로 이동하고 싶습니다. 내가 겪고있는 문제는 첫 번째 파일이로드되는 동안 2 번째 문제를로드하려고 시도한다는 것입니다. 나가기를 기다렸지 만 그렇게하면 출력 데이터가 서식있는 텍스트 상자에 쓰여지지 않습니다. 어떤 아이디어?
나는 여러 다른 장소에서 출구 기다림을 시도했지만 작동하지 않는 것 같습니다.
아래의 두 가지 방법은 stdout 또는 error를 richtext 필드에 씁니다.
어떤 아이디어라도 좋을 것입니다. Bascally 끝내려면 프로세스가 필요하므로 forloop이 다음 파일을로드하는 것으로 계속 생각할 수 있습니다.
WaitForExit을 사용하면 프로세스가 종료 될 때까지 응용 프로그램이 대기 (대기)합니다. 이는 UI 스레드에서 Windows 메시지를 처리 ​​할 수 ​​없으므로 UI를 업데이트하지 않음을 의미합니다.
"백그라운드에서"프로세스를 시작해야 UI가 계속 새로 고침됩니다. 이 작업은 다음을 사용하여 수행 할 수 있습니다.
별도의 스레드에서 프로세스를 시작하고 모니터하고 진행 상황 정보를 UI 스레드로 다시 전달하여 표시합니다. 프로세스 처리 이벤트에 이벤트 처리기를 추가하거나 프로세스를 주기적으로 폴링합니다. HasExited 플래그를 사용하여 첫 번째 프로세스의 상태를 확인합니다 끝마친. 이벤트 처리기는이 프로세스를 시작한 다음 기본 응용 프로그램 루프로 다시 나가서 외부 프로세스가 완료 될 때까지 기다리는 동안 정상적으로 실행되도록합니다.
완료 될 때까지 바쁜 대기 루프에 앉아 애플리케이션 이벤트를 처리하십시오. (이 코드에 대한 재 호출 호출을 유발하는 모든 이벤트는 매우 나쁜 작업을 수행 할 수 있으므로 일반적으로이 방법을 사용하면 나머지 응용 프로그램을 알고있는 상태에서 "잠겨"있는지 확인해야합니다 프로세스가 완료되기를 기다리는 중입니다). 이것은 효과적으로 WaitForExit이하는 일이지만 응용 프로그램 이벤트도 처리하므로 UI가 막연하게 응답 할 수 있습니다.
나는 여기에서 완전히 틀릴지도 모른다.
-jar 뒤에 공백이 있어야합니다.
그렇지 않으면 Java가 즉시 폭탄을 터뜨릴 것입니다.
UI 스레드에서 WaitForExit 호출을 이동하는 중입니다.
M. Babcock이 언급했듯이, 당신은 서식있는 텍스트 상자에 대한 업데이트를 기다리고 있습니다.
이와 비슷한 해결책이 효과적 일 수 있습니다.
목록을 처리하는 새 스레드를 시작하려면 btnLoad_Click을 수정하십시오 (count> 0 브랜치에 있음).

Vb waitforexit 작동하지 않음
WaitForExit () () () 오버로드는 연결된 프로세스가 종료 될 때까지 현재 스레드를 대기 상태로 만드는 데 사용됩니다. 이 메소드는 Process 구성 요소가 프로세스가 종료 될 때까지 무한한 시간 동안 대기하도록 지시합니다. 이로 인해 응용 프로그램이 응답을 중지 할 수 있습니다. 예를 들어 사용자 인터페이스가있는 프로세스에 대해 CloseMainWindow를 호출하면 프로세스가 메시지 루프를 입력하지 않도록 작성된 경우 연결된 프로세스를 종료하라는 운영 체제의 요청이 처리되지 않을 수 있습니다.
이 과부하는 경로 재 지정된 표준 출력에 대한 비동기 이벤트 처리를 포함하여 모든 처리가 완료되었는지 확인합니다. 표준 출력이 비동기 이벤트 처리기로 리디렉션되었을 때 WaitForExit (Int32) 오버로드를 호출 한 후에이 오버로드를 사용해야합니다.
이것은 물론입니다. Note 프로세스가 끝나기를 기다리지 않는다고 생각하는 이유는 무엇입니까? 그 징후는 무엇입니까? 증거가 뭐죠?
프로세스 p = 새 프로세스 ();
MessageBox. Show (& quot; 이제 브라우저가 종료되어야합니다 & quot;);
당신이 사용할 수있는 프로세스 객체를 얻지 않는다는 것을 제외하고는. 시도하면.
새 프로세스로 Dim myProc ()
myProc = Process. Start ( "iexplore", "finance. yahoo/q/hp? s ="+ symbol);
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

Vb waitforexit 작동하지 않음
VS2005 C #을 사용하고 있고 로컬 IIS가있는 로컬 XP Pro PC에서 테스트 중이므로 CSV 파일을 사용하여 System. Diagnostics를 사용하는 OLEDB 데이터베이스에 데이터를 삽입하는 타사 소프트웨어. exe 파일을 호출하는 웹 서비스를 작성했습니다. 시작하십시오. VS2005 빌드 - 인 ASP 개발 서버 (localhost : 2999 / MyServices / MyServices. asmx)를 사용하면 동일한 코드가 작동합니다. 하지만 IIS 일반 URL (developer / MyServices / MyServices. asmx)을 사용하여 웹 서비스에서 Process. Start를 실행하면 문제가 발생하지 않습니다. 그래서 나는 1 분 후에 프로세스를 죽이기 위해 kill stat를 넣었습니다. 그러나 프로세스는 멈추었지만 아무 것도하지 않았습니다. 코드는 다음과 같습니다. 저는 IIS에 쓰기 및 포함을위한 전체 권한을 부여했습니다.
XmlDocument xmlConfig = 새 XmlDocument ();
문자열 toolPath = xmlConfig [ "TDCService"] [ "속성"].GetAttribute ( "ShopKeepPath");
프로세스 myProcess = Process. Start (toolPath, "/ IMPORT-ACCOUNT / FILENAME - C : \ CustomerCSVfile. csv");
if (! myProcess. HasExited) myProcess. Kill ();
모든 답장.
고려해야 할 두 가지 사항이 있습니다.
어떤 버전의 IIS를 사용하고 있습니까? 웹 서버에서 프레임 워크를 실행할 수 있습니까? 웹 서버의 각 버전을 사용하도록 설정해야합니다. 또는 적어도 앱이 작성된 버전을 사용하도록 설정해야합니다.
고맙습니다. Aspnet 계정에 oledb 데이터베이스에 액세스 할 수있는 권한이 없기 때문에 문제가 발견되었습니다. oledb 데이터베이스 폴더 공유를 설정하면 문제가 해결되었습니다. PC가 도메인에있을 때만 폴더 속성의 보안 탭이 나타나는지 궁금합니다. 내 PC가 도메인에 없기 때문에 공유 탭 아래에 보안 탭과 권한 탭이 없으므로 맞습니까?
나는 비슷한 상황에 처해 있지만 내 상황은 조금 다르게 보인다.
가장 안쪽의 프로세스를 도메인 사용자로 사용하고 있습니다 (아래 코드를 참조하십시오). Perl. exe 프로세스는 올바른 / 의도 된 사용자로 실행중인 서버에 표시되지만이 프로세스는 일반적으로이 프로세스와 관련된 메모리의 일부를 할당 한 다음 최종적으로 종료 될 때까지 그곳에서 중단됩니다. 그것은 결코 로그 파일에 쓰지도 않으며 standardOut 또는 standardError를 통해 유용한 힌트를 얻지도 않습니다.
psi. FileName = ConfigurationManager. AppSettings [ "PerlBinExe" ];
psi. EnvironmentVariables [ "Path" ] + = "; c : \ program files \ imagemagick-6.2.9-q16" ;
psi. UserName = ConfigurationManager. AppSettings [ "UserName" ];
psi. Domain = ConfigurationManager. AppSettings [ "UserDomain" ];
psi. WorkingDirectory = ConfigurationManager. AppSettings [ "WorkingDirectory" ];
string foo = ConfigurationManager. AppSettings [ "UserPass" ];
psi. Password = new System. Security. SecureString ();
for (int i = 0; i 결과 = 새 SingleImageResult (true,
"표준 출력 :" + p. StandardOutput. ReadToEnd () + & quot; \ n \ n & quot; +
"표준 오류 : & quot; + p. StandardError. ReadToEnd () + & quot; \ n \ n & quot; +
"주의 사항 : 프로세스는 죽여야 만했다." );
결과 = 새 SingleImageResult (true,
"표준 출력 :" + p. StandardOutput. ReadToEnd () + & quot; \ n \ n & quot; +
"표준 오류 : & quot; + p. StandardError. ReadToEnd ());
다른 사용자로 프로세스를 실행하고 새로운 환경 변수를 추가하려는 사용자 코드처럼 보였습니다.
EnvironmentVariables 컬렉션에 새로운 환경 변수를 추가하면 LoadUserProfile 속성이 무시 된 것 같습니다.
프로세스 exe는 taskmanager에서 의도 한 사용자로 실행되지만 의도 한대로 다른 사용자가 아닌 현재 사용자의 프로필을로드합니다.
환경 변수를 추가하지 않았을 때 올바른 사용자의 프로필이 예상대로로드되었습니다.
이것이 버그인지 기대되는 행동인지 나는 모른다. 결국 env 변수를 사용하지 않고 인수 정보의 매개 변수로 정보를 전달했습니다.
나는 비슷한 종류의 문제에 직면하고있다.
1. 사용자로부터 사용자 이름과 암호를 가져 오는 Windows 응용 프로그램이 있으며 단추도 있습니다.
2. 사용자 이름과 암호를 입력 한 후 사용자는 해당 단추를 클릭해야합니다.
3. 사용자가 원하는 응용 프로그램을 클릭하면 필요한 웹 페이지 (예 : gmail)를 열어야하며 사용자 이름과 암호를 사용하여 해당 웹 페이지에 로그인해야합니다.
4.이 경우 버튼 클릭 이벤트에 다음 코드를 사용했습니다.
5. 문제는 사용자 이름과 암호는 사용자가 지정하지만 도메인 필드의 내용은 무엇입니까?
6. "Parameter is Incorrect"라는 Win32Exception이 발생합니다.
System. Diagnostics. ProcessStartInfo psi = 새로운 System. Diagnostics. ProcessStartInfo (astr);
System. Diagnostics. 프로세스 proc = 새 System. Diagnostics. 프로세스 ();
proc = System. Diagnostics. 프로세스. 시작 (psi); // - 여기가 멈춘 곳입니다.
System. IO. StreamReader sr1 = proc. StandardOutput;
문제가 비슷할 수도 있지만 동일하지 않을 수 있습니다. 새로운 스레드를 시작하는 것이 좋습니다. 소수의 사람들이 이미 응답으로 표시된 스레드를 읽지 않기 때문입니다.
존 손더스 | 파일 - & gt; 새 프로젝트를 사용하여 웹 서비스 프로젝트를 만듭니다.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

No comments:

Post a Comment