Windows Form을 사용하려는 C++ 콘솔 응용 프로그램이 있습니다. 나는 어떻게해야할지 모르므로 MFC를 사용하고 싶지 않다. 대신 C#을 사용하여 COM dll (클래스 라이브러리)을 만듭니다. 응용 프로그램과 dll을 대상 컴퓨터에 배포 할 때 응용 프로그램이 COM 인터페이스를보고 dll에서 만든 클래스를 사용할 수 있도록 dll을 등록해야합니다. 나는이 작업을 수행 할 수있는 몇 가지 방법이 알고WinXP 컴퓨터에 COM 어셈블리를 자동으로 등록하는 방법
:
내 응용 프로그램의 설치 사용 RegAsm을 되세요 - 나는 때문에 두 가지의를 사용하지 않으 : 몰라요 A. 그 대상 PC의 위치 (어딘가에 있더라도 경로를 하드 코딩하지 않으려합니다.) B. 설치 프로그램에서 regasm을 재배포 할 수 있지만 Microsoft가 자유롭게 허용하는지 여부는 확실하지 않습니다.
내 응용 프로그램의 설치 프로그램에서 gacutil을 사용하도록하십시오 - 위와 동일합니다.
개발 컴퓨터에서 regasm을 사용하여 .reg 파일을 만든 다음 응용 프로그램 설치 프로그램에서 .reg 파일을 실행하게하십시오.이 문제에는 두 가지 문제가 있습니다. A. 제거 할 때 DLL을 등록 취소 할 수 없습니다. B.reg를 실행하면 레지스트리에 정보를 추가 할 것인지 사용자에게 묻는 regedit가 호출됩니다.이 정보는 자동으로 "예"로 표시되어 사용자가 결정하지 못하게하려는 것입니다. regedit에는/silent 인수가 없으므로 이것을 사용하지 않았습니다.
Inno 설치 프로그램을 사용하고 COM 라이브러리의 .tlb 파일 (regtypelib 플래그)을 등록하십시오 - 시도했지만 등록이 제대로 작동하지만 응용 프로그램은 여전히 해당 클래스의 인스턴스를 만들 수 없습니다.
ClickOnce를 사용하여 응용 프로그램을 배포하십시오. 응용 프로그램을 사용자의 Documents and Settings 폴더가 아닌 디스크의 특정 폴더에 저장하고 싶기 때문에이 옵션을 사용할 수 없습니다.
나는 C++ 및 C# Visual Studio 9.0 용 Express Edition을 사용하고 있음을 언급해야합니다. Windows XP 컴퓨터에서 COM 라이브러리를 등록하는 다른 방법이 있습니까?
편집 - 업데이트 :
내가 여기 http://msdn.microsoft.com/en-us/library/ms973915.aspx에서의 예에서 자신을 안내 등록이 필요없는 COM을 시도했다. 내가 매니페스트에서 가진 문제를 제쳐두고 떠나자 마침내 COM DLL (등록이 필요 없음)을 "볼"수있는 응용 프로그램을 얻었습니다. 매니페스트가 작동 중입니다. 아쉽게도 CoCreateInstance()를 호출하면 E_OUTOFMEMORY (0x8007000E)가 반환됩니다. COM dll에는 두 개의 클래스가 있지만 COM-visible 인터페이스 (다른 하나는 Form의 클래스이며 private로 지정하려는 경우) 만 만들 수 있습니다. 이것이 문제가 될 수 있습니까? 도움을#import "MyGUI_DLL.tlb" raw_interfaces_only named_guids
[…]
static MyGUI_DLL::MyGUI * g = NULL;
r = CoInitializeEx(NULL, COINIT_MULTITHREADED);
// r is S_OK here
r = CoCreateInstance(MyGUI_DLL::CLSID_MyGUIClass, NULL, CLSCTX_INPROC_SERVER, MyGUI_DLL::IID_MyGUI, reinterpret_cast<void**>(&g));
// r returns E_OUTOFMEMORY
감사 : 는 여기에 몇 가지 코드입니다.
당신은 런타임 동안 .NET 설치 경로를 감지 GetCORSystemDirectory()를 사용할 수 있습니다 여기에 좋은 기사가있다. regasm과 gacutil은 항상 .NET 설치와 동일한 상대적 위치를가집니다. – sharptooth
코드 샘플에 대한 답변보기 http://stackoverflow.com/questions/741632/is-there-a-tool-out-there-to-find-out-which-net-framework-is-installed-on- a-pc/741732 # 741732 – sharptooth