누군가가 어떻게 dll에 exe 파일을 임베드 할 수 있는지 알고 있습니까?dll에 * .exe를 임베드
나는 C# 코드에서 호출하는 exe 파일 도구가 있습니다.
이 도구 (exe 파일)와 dll에 내 C# 코드가 포함 된 1 개의 DLL이 있어야합니다.
리소스 내에이 exe 파일을 포함시킬 수 있습니까?
미리 예약 해주세요.
누군가가 어떻게 dll에 exe 파일을 임베드 할 수 있는지 알고 있습니까?dll에 * .exe를 임베드
나는 C# 코드에서 호출하는 exe 파일 도구가 있습니다.
이 도구 (exe 파일)와 dll에 내 C# 코드가 포함 된 1 개의 DLL이 있어야합니다.
리소스 내에이 exe 파일을 포함시킬 수 있습니까?
미리 예약 해주세요.
물론입니다. 응용 프로그램에서 RC_DATA로 파일을 자원으로 추가 할 수 있습니다. 그러나 나는 그것을 호출하기 전에 먼저 디스크에 압축을 풀 필요가 있다고 생각합니다!
사용중인 IDE/언어는 무엇입니까?
[편집]
죄송합니다. C#을 사용하고 있다고 언급했습니다.
그것은 당신의 사용도하지 않을 수 있습니다 염두에 드러내는 가치 이 일을하는 것에 대해 행복합니다. 사용자가 추출하여 실행할 DLL을 제어 할 수없는 실행 파일을 임베드하면 컴퓨터에서 트로이 목마가 실행되는 것에 대해 걱정할 수 있습니다.
파일 시스템에 .EXE를두고 응용 프로그램이하는 일에 대해 투명하게하는 것이 좋습니다.
이것은 실제로 유효한 문제가 아닙니다. 사용자가 내 DLL을 실행중인 경우 분명히 나를 신뢰합니다. 게다가 당신이 사용하는 응용 프로그램에 의해 시작된 도우미 실행 파일을 보셨습니까? – tster
바이트 []에서 어셈블리를로드 할 수 있습니다. 이것은 임베디드 리소스의 ManifestResourceStream을 통해 얻을 수 있습니다.
대안은 .exe 자체를 포함하지 않고 dll에 기능을 포함시키고 rundll32 [1]을 사용하여 실행할 수 있습니다.
그게 내 선택이 될거야 ... 내가 이것을 읽을 때까지 The Old New Thing post : [rundll32를 사용할시기에 대한 안내는 무엇입니까? 쉬운 : 그것을 사용하지 마십시오] (http://blogs.msdn.com/b/oldnewthing/archive/2013/01/04/10382242.aspx) –
@ VáclavSlavík : link broken; [여기에 새로운 것이 있습니다] (https://blogs.msdn.microsoft.com/oldnewthing/20130104-00/?p=5643). – hydroiodic
리소스에서 디스크로 파일을 가져 와서 코드를 실행할 때 Windows Data Execution Prevention이 트리거 될 수 있음을 기억하십시오. 기본적으로 Windows는 코드 또는 데이터로 간주되는 것이 있으면 자동으로 검색합니다. , 데이터 (자원과 같은)처럼 보이면 해당 데이터가 코드로 실행되는 것을 방지합니다.
. NET 어셈블리가 로컬 드라이브가 아닌 네트워크를 통해 사용되는 경우 특히 문제가됩니다. 올바르게 작동하지 않도록하는 모든 종류의 .NET 보안 구성이 있습니다.
또 다른 옵션은 프로젝트의 세부 사항을 알지 못하는 채로 소금물로 채우십시오 : 호기심이 많은 사용자 나 IT 직원에게 실행 파일이있는 이유를 설명하는 .exe.readme 파일을 설치 파일에 추가하십시오 설치 디렉토리에서 기대하지 않음 :)
그건 ... DEP에 대해 흥미롭게도 혼란스런 설명입니다. 아니요. DEP는 실제로 디스크 위의 실행 파일을 리소스 포크에서 가져 오는 것으로 마술처럼 태그 지정하지 않으므로 실행 파일이 아닙니다. 그리고 아니요, DEP는 아무것도 감지하지 못합니다. 대신 메모리 페이지를 실행 가능 또는 비 실행 가능으로 태그 지정하는 메커니즘입니다. –
이 질문은 임베디드 시스템과 관련이 없으므로 "임베디드"태그를 제거했습니다. –