2014-03-27 7 views
3

inno 설치 프로젝트로 작업하고 있습니다. 프로젝트는 [코드] 섹션의 SaveStringToFile 함수를 사용하여 파일을 쓰고 있습니다. 이 파일을 숨겨진 시스템 파일로 만들고 싶습니다. 그러나이 작업을 수행하는 방법에 대한 정보를 찾을 수 없었습니다. 어떤 아이디어?Inno Setup 코드 섹션에서 숨김 파일을 만듭니다.

답변

3

Inno Setup Pascal Script에서 파일 속성을 설정하는 기능은 없습니다. 따라서 파일 속성을 설정하거나 다음 트릭을 사용할 수있는 Windows API 함수를 가져와야합니다. 스크립트 항목에서 숨겨 지도록 설정 한 빈 파일을 만들면 그곳에서 필요한 파일을 쓸 수 있으므로 숨겨진 파일을 생성하는 설치 프로세스가됩니다.

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
; MyFile.txt is an empty text file 
Source: "MyFile.txt"; DestDir: "{app}"; Attribs: hidden; AfterInstall: WriteToFile 

[Code] 
procedure WriteToFile; 
begin 
    SaveStringToFile(ExpandConstant('{app}\MyFile.txt'), 'Hello!', True); 
end; 
나는 또한 명시 적으로 파일을 숨김 속성을 설정할 수있는 기능을 포함하고있어 completness을 위해서

는 :

[Code] 
#ifdef UNICODE 
    #define AW "W" 
#else 
    #define AW "A" 
#endif 

const 
    INVALID_FILE_ATTRIBUTES = $FFFFFFFF; 

function GetFileAttributes(lpFileName: string): DWORD; 
    external 'GetFileAttributes{#AW}@kernel32.dll stdcall'; 
function SetFileAttributes(lpFileName: string; dwFileAttributes: DWORD): BOOL; 
    external 'SetFileAttributes{#AW}@kernel32.dll stdcall'; 

procedure RaiseLastOSError; 
var 
    LastError: LongInt; 
begin 
    LastError := DLLGetLastError; 
    RaiseException(Format('System Error. Code: %d. %s', [LastError, 
    SysErrorMessage(LastError)])); 
end; 

procedure SetFileHiddenAttr(const FileName: string); 
var 
    Attrs: DWORD; 
begin 
    Attrs := GetFileAttributes(FileName); 
    if Attrs <> INVALID_FILE_ATTRIBUTES then 
    begin 
    if Attrs and FILE_ATTRIBUTE_HIDDEN = 0 then 
     if not SetFileAttributes(FileName, Attrs or FILE_ATTRIBUTE_HIDDEN) then 
     RaiseLastOSError; 
    end 
    else 
    RaiseLastOSError; 
end; 
+1

이 완벽합니다. 이런 식으로 생각했지만 모든 물류를 파악할 수는 없었습니다. AfterInstall은 내가 필요한 것입니다. 나는이 파일이 제거 프로세스에 의해서도 처리되기 때문에 정말 좋아한다. 감사! – thecaptain0220

+0

당신을 진심으로 환영합니다! 명시 적으로 숨겨진 속성을 파일에 포함 할 수있는 함수도 추가했습니다. 하지만 필자는 언급 한 것처럼 파일이 제거 프로그램에 포함되어 있기 때문에 개인적으로 첫 번째 옵션을 선호합니다. – TLama