프로그램 적으로 tlb 파일을 생성하기 위해 regasm.exe를 실행하는 프로그램을 작성하고 싶습니다.C++ 프로그램에서 regasm.exe를 실행하는 방법은 무엇입니까?
어떻게하면됩니까 ??
우회 도움말은 크게 감사드립니다 ...
미리 감사드립니다.
프로그램 적으로 tlb 파일을 생성하기 위해 regasm.exe를 실행하는 프로그램을 작성하고 싶습니다.C++ 프로그램에서 regasm.exe를 실행하는 방법은 무엇입니까?
어떻게하면됩니까 ??
우회 도움말은 크게 감사드립니다 ...
미리 감사드립니다.
"fullPathToRegasm/somekeys filename"과 같은 명령 줄을 실행하려면 CreateProcess() 함수를 사용해야합니다.
주요 문제는 regasm 위치를 감지하는 것입니다. GetCORSystemDirectory() 함수를 사용하십시오. 먼저 첫 번째 LoadLibrary()를 사용하여 mscoree.dll을로드 한 다음 GetProcAddress()를 호출하여 GetCORSystemDirectory() 함수를 찾은 다음 해당 함수를 호출합니다.
이렇게하면 .NET 설치의 근원이됩니다. regasm은 일반적으로 주어진 시스템의 설치 루트와 동일한 하위 경로에 위치하므로 탐지 된 루트를 하위 경로와 안전하게 결합 할 수 있으며 유효한 regasm 위치가됩니다.
NET은 병렬 설치이므로 시스템에 regasm.exe
버전이 여러 개있을 수 있으며 일부 버전은 업데이트 일 뿐이므로 일부 위치에서 찾을 수 없을 수도 있습니다.
나는 바로 포인트 (registry, unmanaged code, Environment 등) NET version에 greatly varies에 도착하는 여러 atempts도 있기 때문에,이 작업을 수행하는 가장 좋은 방법을 찾고 시간을 보냈습니다. 또한 각 Windows 버전은 his own NET 버전을 제공합니다.
위의 것들은 모두 내 취향에 맞게 시스템 전체에서 안정적 이었으므로 가능한 한 모든 regasm.exe
파일을 검색하여 최신 버전을 확인했습니다. 저것과 같이 쉬운.
내 생각에 문제가 될 수 있지만 내 대답이 더 성공적 일 수 있다고 생각하면 엄지 손가락을 올려주세요 !!
// Scan for ALL regasm.exe available.
string netdir = Environment.GetEnvironmentVariable("WINDIR") + "\\Microsoft.NET\\";
string[] filelist = System.IO.Directory.GetFiles(netdir, "regasm.exe", System.IO.SearchOption.AllDirectories);
// Find the NEWEST regasm.exe available.
string newestFilePath = string.Empty;
FileVersionInfo currFileVersion = null;
FileVersionInfo newestFileVersion = null;
foreach (string currFilePath in filelist) {
currFileVersion = FileVersionInfo.GetVersionInfo(currFilePath);
if (newestFileVersion == null) {
newestFilePath = currFilePath;
newestFileVersion = currFileVersion;
} else if ((currFileVersion.FileMajorPart >= newestFileVersion.FileMajorPart) &&
(currFileVersion.FileMinorPart >= newestFileVersion.FileMinorPart) &&
(currFileVersion.FileBuildPart >= newestFileVersion.FileBuildPart) &&
(currFileVersion.FilePrivatePart > newestFileVersion.FilePrivatePart)) {
newestFilePath = currFilePath;
newestFileVersion = currFileVersion;
}
}
샘플 코드 스 니펫 plzzzz – Cute
나는 오히려 그것을 작성하고 진행하면서 구체적인 질문을하기를 제안합니다. – sharptooth
감사합니다. – Cute