2014-01-28 4 views
0

타이머를 통해 사용자 상태를 지속적으로 확인하는 단일 양식 응용 프로그램이 있습니다. 웹 응용 프로그램에서 process.start ("C : \ inetpub \ wwwroot \ mywebapp \ Checker \ checker.exe")를 사용하여 동일한 .exe를 시작하고 싶습니다. exe는 코드 실행 후 시스템 프로세스 목록 (Windows 작업 관리자의 응용 프로그램 목록에 나타나지 않음)에 나타나지만 아무 것도 수행하지 않습니다. 사용자 상태를 변경하거나 데이터를 데이터베이스로 전송하지 않습니다. 그러나 동일한 .exe를 두 번 클릭하여 수동으로 시작하면 작업이 시작되고 Windows 작업 관리자 응용 프로그램 목록과 프로세스 목록에도 나타납니다. .exe는 C# .Net으로 만들어지고 C# Windows 응용 프로그램의 파일로 실행됩니다.Process.Start()와 Manual Start의 차이점

+0

가능한 중복 [.NET Process.Start 기본 디렉토리?] (http://stackoverflow.com/questions/114928/net-process-start-default-directory) –

답변

0

IIS에서 시작할 때 프로세스는 시작한 계정으로 실행되며 웹 응용 프로그램을 실행하는 프로세스는 w3wp입니다. 귀하의 계정이 아니기 때문에 "모든 사용자로부터 프로세스 표시"옵션을 선택하기 전까지는 작업 관리자에 나타나지 않습니다. 더블 클릭으로 실행하면 귀하의 계정에서 실행되므로 볼 수 있습니다.

변경 사항 및 데이터베이스 액세스가 계정을 사용하여 액세스하는 경우 IIS 내에서 실행될 때 작동하지 않을 수 있습니다. 예를 들어 데이터베이스 연결이 "Windows 인증"을 사용하여 완료되면 IIS 계정으로 로그인하려고 시도합니다. 이는 작동하지 않을 것입니다.

이 문제를 해결하려면 ProcessStartInfo 구조에서 사용자 이름/암호를 지정하여 프로세스를 시작할 수 있습니다. 그러나 이렇게하려면 암호를 어딘가에 삽입해야하며 바람직하지 않을 수도 있습니다. 다른 방법으로는 데이터베이스 연결 문자열을 변경하여 로그온 자격 증명을 명시 적으로 지정하십시오.

+0

내가 아래를 사용할 때 You Sean이 맞습니다. Visual Studio 디버거에서 코드를 실행하면 exe가 시작되고 데이터베이스를 업데이트하여 응답을받습니다.하지만 IIS에 배포하고 코드를 실행하면 프로세스 목록에 나와있는 .exe가 표시되지만 아무 것도 수행하지 않습니다. 나는 프로세스 목록에 .exe가 있지만 die와 같고 연결 문자열 등을 변경하더라도 아무 일도하지 않는다는 것을 의미합니다. 테이블 이름이나 연결 문자열을 변경하면 오류 메시지가 표시됩니다. – ZahidKakar

+0

myprocess.StartInfo = new ProcessStartInfo ("C : \\ inetpub \\ wwwroot \\ visionweb \\ UploadedLogo \\ Checker \\ OnlineOffline.exe"); myprocess.Start(); – ZahidKakar

+0

테스트로서'ProcessStartInfo'의'Username'과'Password' 속성을 상세하게 설정하고 IIS에서 실행하십시오. – Sean