프로그래밍/c#

외부 파일 실행하기(Process.Start와 ShellExecute 함수의 차이점)

do121 2023. 5. 27. 07:53

- 연결 파일을 실행하는 코드

// ShellExecute 함수에 대한 P/Invoke 선언  
\[DllImport("shell32.dll", CharSet = CharSet.Auto)\]  
public static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);  

public static void Main()  
{  
    // 실행할 연결 파일의 경로  
    string filePath = "C:\\\\path\\\\to\\\\your\\\\file.lnk";  

    // ShellExecute 함수 호출  
    IntPtr result = ShellExecute(IntPtr.Zero, "open", filePath, "", "", 1);  

    // 실행 결과 확인  
    if (result.ToInt32() > 32)  
    {  
        Console.WriteLine("파일이 성공적으로 실행되었습니다.");  
    }  
    else  
    {  
        Console.WriteLine("파일 실행 중 오류가 발생했습니다.");  
    }  
}

- Process.Start와 ShellExecute 함수의 차이점

  1. 플랫폼 독립성: Process.Start는 .NET 프레임워크의 일부이므로 C#을 사용하는 어떤 플랫폼에서도 작동. 반면에 ShellExecute는 Windows API 함수이기 때문에 Windows 운영 체제에서만 사용할 수 있다.
  2. 실행 방식: Process.Start는 지정된 실행 파일을 직접 실행. 실행 파일에 대한 경로를 지정하고 필요한 명령행 매개변수를 전달할 수 있다. 반면에 ShellExecute는 파일의 확장자에 따라 파일의 연결 동작을 실행. 예를 들어, .txt 파일을 ShellExecute로 실행하면 기본 텍스트 편집기가 실행. 따라서 ShellExecute는 파일의 연결 동작을 유지하면서 해당 파일을 실행.
  3. 반환값: Process.Start는 Process 개체를 반환. 이를 통해 실행 중인 프로세스의 상태를 추적하고 제어할 수 있다. 반면에 ShellExecute는 실행 결과로 IntPtr 핸들을 반환. 반환된 핸들을 통해 실행 결과를 확인할 수 있지만, Process 개체처럼 상세한 정보를 추적할 수는 없음.

 

- 확장자만 구하는 코드

                      string extension = Path.GetExtension(processPath).Trim();
                    if (!string.IsNullOrEmpty(extension))
                    {
                        extension = extension.TrimStart('.');
                        if(extension.Equals("exe", StringComparison.OrdinalIgnoreCase)) //실행파일이면 
                        {

                            return;
                        }
                        
                    }