Inno Setup을 사용하고 있습니다. 설치된 응용 프로그램이 여러 번 설치할 수 있으므로 여러 시작 메뉴 바로 가기가 만들어집니다. 내가 겪고있는 문제는 여러 아이콘이 동일한 응용 프로그램 위치 (중복)에 생성된다는 것입니다. 내 솔루션은 설치 과정에서 기존 시작 메뉴 바로 가기를 확인하고 바로 가기의 작업 또는 대상 디렉토리 속성을 읽고 현재 설치 디렉토리와 비교하여 확인합니다. 단축키 중 하나에 일치하는 것이 있으면 바로 가기를 설치하지 마십시오.Inno 설치 : IShellLink를 사용하여 액세스 위반 GetWorkingDirectory
"CodeAutomation2.iss"예제 파일을 시작 지점으로 사용하여 바로 가기 링크에서 작업 디렉토리를 읽습니다. 예제 파일의 IShellLink 코드는 내가 사용하고 있지만 "GetWorkingDirectory"를 사용하려고하면 다음과 같은 오류가 발생합니다. 다음은
내가 사용하고있는 코드입니다. "GetWorkingDirectory"에서 내가 뭘 잘못하고 있니? 당신이 그것을 통과하기 전에var
ShortcutFile: String;
WorkingDir: String;
Obj: IUnknown;
SL: IShellLinkW;
PF: IPersistFile;
begin
{ Create the main ShellLink COM Automation object }
Obj := CreateComObject(StringToGuid(CLSID_ShellLink));
{ Set the shortcut properties }
SL := IShellLinkW(Obj);
PF := IPersistFile(Obj);
NumFiles := 1
ShortcutFile := ExpandConstant('{#MyAppName}');
Log('File is: ' + ExpandConstant('{group}') + '\' + ShortcutFile + '.lnk');
OleCheck(PF.Load(ExpandConstant(ExpandConstant('{group}') + '\' + ShortcutFile + '.lnk'), 0));
OleCheck(SL.GetWorkingDirectory(WorkingDir, 250));
Log('WorkingDir: ' + WorkingDir);
너무 감사합니다! 경로 뒤에 원치 않는 문자를 모두 제거하는 방법에 대한 제안 사항이 있습니까? 경로를 가져 오는 중 문자열의 나머지 부분은 쓸모없는 문자로 채워집니다. – Mark
@Ken : null 문자로 채우는 것이 트릭을 만들었습니다. TLama, Ken에게 감사드립니다. 매우 감사. 예,이 스레드를 정리해주십시오! 감사! – Mark