2010-07-18 6 views
1

나는 AutoCAD와 함께 실행하고 통과하는 동안 AutoCAD의 acad.exe 바로 가기를 만드는 데 사용되는 배포 프로젝트 (Wix 기반)에서 작업 중입니다. 그것의 자신의 주장.32 비트 MSI : 64 비트 응용 프로그램의 단축 경로 대상 경로를 32 비트 경로로 변환

이 작업을 수행하려면 Autocad의 레지스트리 키를 반복하고 "acad.exe"위치를 얻고 런타임시 MyInstaller.msi의 MSI Api 메서드를 사용하여 바로 가기를 작성/업데이트하는 사용자 지정 작업 dll (C++)이 있습니다.

문제 : 윈도우 7과 같은 64 비트 OS에

, 사용자 지정 작업이 레지스트리에서 'acad.exe'위치 적절한을 읽고 즉, C : \ Program Files \ AutoCAD를 2010 acad.exe \ 및 업데이트 런타임시 msi의 바로 가기 속성. 그러나 msi가 바로 가기 생성을 완료하면 경로는 32 비트 프로그램 파일 즉 C : \ Program Files (x86) \ AutoCAD 2010 \ acad.exe로 변환됩니다. 실제로는 존재하지 않습니다. 약

내 작업 : 내 MSI로

는 32 비트 (86), 그래서/갱신이 구성 요소에 대한 바로 가기를 만들 수 속성의 Win64 = 예, 수정 된 사용자 지정 작업과 별도의 구성 요소를 만들었습니다. 그러나 바로 가기의 대상 경로는 C : \ Program Files (x86)로 변환됩니다.

x64 OS 용 MSI를 변환하면 해결 될 수도 있지만 현재로서는 큰 변화를 할 수 없습니다.

32 비트 msi가 x64 OS 경로가 포함 된 바로 가기를 만들 수있는 방법이 있습니까?

아무 도움이 정말 감사하겠습니다.

고마워.

답변

0

나는 그것을 해결할 수 있었다 확인 :

문제가했다

, 32 비트 MSI는 64 비트 OS에 해당하는 경로는 우리의 사용자 지정 작업의 DLL을 64 비트에서의 AutoCAD의 경로를 얻고 있었다 즉 32 비트에 (바로 가기 테이블에) 경로를 전환했다 레지스트리 키를 C : \ Program Files \ AutoCAD 2010 \으로 입력 한 다음이 경로를 MSI의 바로 가기 테이블과 디렉터리 테이블에 삽입하십시오. 그러나 MSI가 바로 가기를 작성하면 C : \ Program Files (x86) \ AutoCAD 2010으로 변환되었습니다.

32 비트 MSI에는 64 비트 구성 요소를 포함 할 수 없지만 Vice Versa는 가능합니다. 64 비트 MSI에 32 비트 구성 요소가 있습니다.

그러나 내 경우에는 바로 가기에 64 비트 구성 요소를 사용해야하고 다른 구성 요소는 32 비트로 남아 있어야합니다.

그래서 32 비트 MSI를 패키지 정보에 Plantform = x64를 추가하는 64 비트 MSI로 변환했습니다. Win64 = Yes로 구성 요소를 선언하십시오.

그리고 내 문제가 해결되어 이제는 바로 가기에서 적절한 경로를 얻게됩니다.

이로 인해 이제는 각각 32 비트 및 64 비트 각각 별도의 설치 프로그램이 있습니다.

안부

Farrukh

1

MSI에 대한 업스트림에서 수영하고 있습니다. (이유를 이해할 수는 있지만)

공식적으로 MSI는 플랫폼 nuetral이 아닙니다. MSI의 AppSearch/Reglocator가 WoWSys64 노드에 제약을주기 때문에 레지스트리 값을 읽는 사용자 지정 작업을 사용한다고 가정합니다. 그 후 MSI는 응용 프로그램 호환성 접근 방식의 일부로 프로그램 파일에 대한 하드 코딩 된 참조를 대체합니다 (기본적으로 Microsoft는 사용자가 수행중인 작업을 알지 못한다고 가정하고 사용자가 실제로 수행하려는 작업을 알고 있음을 전제로합니다).

비공식적으로이 문제를 해결하기 위해 알아 낸 해킹을 찾으려면이 스레드를 읽으십시오. 요약하면 C : \ Program Files \를 짧은 경로 (C : \ Progra ~ 1)로 변환하면 MSI는 당신이 무엇을 참조하고 있는지 파악할만큼 똑똑하지 않으므로 값을 대체하지 못한다는 것을 발견했습니다.

http://www.joyofsetup.com/2010/03/27/wix-msbuild-v2-0-and-x64-systems/

주, 해킹 및 Microsoft는 이후 릴리스에서 '고칠'한다면 말하는 방법이 없습니다이. 내가 생각할 수있는 유일한 방법은 바로 가기 테이블을 사용하지 않고 대신 사용자 지정 작업을 작성하여 바로 가기를 만드는 것입니다.

MSI에 대해 수영하고 싶지 않은 경우이 해결 방법을 고려하십시오. AutoCAD의 프론트 엔드 실행기 역할을하는 소형 64 비트 EXE (예, 64 비트 또는 AnyCPU exe를 Program Files x86에 x86 MSI로 배포 할 수 있음)를 만듭니다. 레지스트리 테이블을 쿼리하고 파일을 찾은 다음 실행하거나 찾지 못하면 AutoCAD를 사용할 수 없다는 메시지를 표시합니다.

이렇게하면 설치가 훨씬 깔끔하게됩니다.

+0

안녕 크리스토퍼 감사 자세한 응답을 많이 :). 글쎄, 반복 접근법을 사용하여 AutoCAD 레지스트리 키를 읽으려면 사용자 지정 작업을 사용해야합니다. 반복적 인 접근법의 목적은 하나의 머신에 여러 버전의 AutoCAD가 존재하기 때문에 AutoCAD가로드 할 파일의 매개 변수를 전달하면서 AutoCAD의 각 버전에 대한 바로 가기를 만들어야합니다. 그리고 MSI의 AppSearch/Reglocator를 통해이를 수행 할 수 없습니다. 당신이 제안한 다른 방법은 제가 지금 생각하고있는 것입니다. 그러나 그 전에는 긴 경로를 짧은 경로로 변환하려고합니다. –

+0

64 비트 exe를 만드는 것은 좋은 생각입니다.하지만 먼저 프로젝트 팀 매니저와상의해야합니다. 그래서 그들은이 문제에 동의 할 것이라고 생각하지 않습니다. ( –

+0

유일한 방법은 다음과 같이 실험 해 봅니다. 64 비트 MSI는 샘플 설치이었다과 구성 요소는 64 비트였다. 그래서 나는 또한 64 비트 OS에 대해 별도의 x64bit의 MSI을 가지고 고려하고, x64bit MSI뿐만 아니라 32 비트 구성 요소를 제공 할 수 있기 때문이다. 덕분에 고려에 대한 많은 내 쿼리. :) –

관련 문제