- 연결 파일을 실행하는 코드
// 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 함수의 차이점
- 플랫폼 독립성: Process.Start는 .NET 프레임워크의 일부이므로 C#을 사용하는 어떤 플랫폼에서도 작동. 반면에 ShellExecute는 Windows API 함수이기 때문에 Windows 운영 체제에서만 사용할 수 있다.
- 실행 방식: Process.Start는 지정된 실행 파일을 직접 실행. 실행 파일에 대한 경로를 지정하고 필요한 명령행 매개변수를 전달할 수 있다. 반면에 ShellExecute는 파일의 확장자에 따라 파일의 연결 동작을 실행. 예를 들어, .txt 파일을 ShellExecute로 실행하면 기본 텍스트 편집기가 실행. 따라서 ShellExecute는 파일의 연결 동작을 유지하면서 해당 파일을 실행.
- 반환값: 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;
}
}
'프로그래밍 > c#' 카테고리의 다른 글
딕셔너리 사용법 (0) | 2024.05.06 |
---|---|
C# 난독화하기 - ConfuseEx (0) | 2024.05.05 |
마우스 아래 창의 핸들 가져오기 (0) | 2024.05.05 |
함수에서 여러개의 값을 리턴하고 사용하는 방법 (0) | 2024.04.14 |
최위창으로 실행하는 방법 (0) | 2024.04.13 |