사용자가 내 응용 프로그램을 처음 설치하는 경우 DLL을 자동 등록하도록 어떻게 구성합니까? 이전 버전이 있으면 등록을 취소하고 새 버전을 등록하십시오 인터페이스가 다르다고 가정)?Inno 설치로 DLL 서버 업데이트
[Setup]
...
[Languages]
...
[Files]
Source: "C:\example.dll"; DestDir: "{app}"; Flags: ignoreversion regserver
을 내 구글 검색에서 내가 UnregisterServer를 발견하지만 난 내 스크립트에이를 추가하는 방법을 모른다 : 아래와 같이
나는 현재 내 파일 섹션하여 regserver를하고 ignoreversion 플래그를 사용합니다. 나는 기쁘게 어떻게 돌아가는지를보기 위해 주위를 고치기 시작할 것이지만, 나는 나의 레지스트리를 엉망으로 만드는 일을하고 싶지 않다.
here 비슷한 게시물이 있지만 실제로 어떻게 수행되는지는 설명하지 않습니다.
편집
파스칼 주위 해킹 후 나는 [코드] 섹션에 다음을 추가 할 수 있었다 일했다. 아래 코드에서 {app} 상수를 사용하여 fileName을 동적으로 정의하는 방법을 아는 사람이 있습니까?
[Code]
const
fileName = 'C:\Program Files\TFolderName\tigercontroller.dll';
var
serverExists: Boolean;
function InitializeSetup(): Boolean;
begin
serverExists := UnregisterServer(False, fileName, False);
if serverExists then begin
Result:= True;
MsgBox('This will update with the most recent version', mbInformation, mb_Ok);
end else
Result := True;
end;
'InitializeSetup' 시간에'{app}'상수를 확장하기에는 너무 이르다. 또한,'{app}'상수는 이전에 선택한 응용 프로그램 폴더를 확인하기 위해 현재 선택된 설치 폴더를 포함합니다. 'WizardForm.PrevAppDir' 속성의 마지막 폴더는'InitializeWizard' 이벤트 메서드에서 곧 얻을 수 있습니다. ['이 길 '] (http://pastebin.com/pkXAgEzH). – TLama
Tlama, 고맙습니다! 왜 내가 {app}을 참조 할 수 없는지 궁금합니다. WizardForm.PrevAppDir은 어떻게 작동합니까? 마법사를 사용하여 이전에이 마법사를 사용했음을 알 수 있도록 .iss 스크립트를 동일하게 유지해야합니까? –
일반적으로 호환되지 않는 COM 인터페이스를 충분히 변경하지 않아도됩니다. (단 하나만 추가하고 빼기는 절대하지 않아야합니다.) 따라서 이전 버전의 등록을 취소 할 필요가 없습니다. 물론 공유 된 응용 프로그램이 아닌 응용 프로그램 개인 라이브러리 인 경우 약간의 여유가 생깁니다. – Miral