Inno Setup打包程序添加hosts解析


在一些特殊情况下,需要指定某个域名的IP地址。在Inno Setup打包程序时,可以直接设置。

在Inno Setup脚本中,加入[Code]字段。代码如下:

 1 [Code]
 2 #ifdef Unicode
 3 #define A "W"
 4 #else
 5 #define A "A"
 6 #endif
 7 
 8 
 9 const
10 myMark = '我是为什么添加';   // 作为标识
11 
12 function GetFileAttributes(lpFileName: String): Cardinal;
13 external 'GetFileAttributes{#A}@kernel32.dll stdcall';
14 
15 function SetFileAttributes(lpFileName: String; dwFileAttributes: Cardinal): Boolean;
16 external 'SetFileAttributes{#A}@kernel32.dll stdcall';
17 
18 function LineInFile(sLine, fPath: string): Boolean;
19 var
20 aos: TArrayOfString;
21 n: Integer;
22 begin
23 Result:= false;
24 if LoadStringsFromFile(fPath, aos) then
25 for n:= 0 to GetArrayLength(aos)-1 do
26   if aos[n] = sLine then
27     begin
28     Result := true;
29     Exit;
30     end;
31 end;
32 
33 procedure AddHosts(newItem, comments: string);
34 var
35 OldFileAttribute: Cardinal;
36 hfPath, newLine: string;
37 begin
38 hfPath := ExpandConstant('{sys}\drivers\etc\hosts');
39 if not LineInFile(newItem, hfPath) then       // 仅添加 Hosts 中还没有的项目
40   begin
41   OldFileAttribute:= GetFileAttributes(hfPath);
42   SetFileAttributes(hfPath, FILE_ATTRIBUTE_NORMAL);
43   newLine := newItem + ' # ' + myMark;
44   If comments > ' ' then
45     newLine := newLine + ' / ' + comments;
46   SaveStringToFile(hfPath, #13#10 + newLine, True);
47   SetFileAttributes(hfPath, OldFileAttribute);
48   end;
49 end;
50 
51 procedure RemoveHosts(sItem: string);
52 var
53 OldFileAttribute: Cardinal;
54 hfPath, newLine: string;
55 stl: TStringList;
56 n: Integer;
57 begin
58 hfPath := ExpandConstant('{sys}\drivers\etc\hosts');
59 newLine := sItem + ' # ' + myMark;
60 stl:= TStringList.Create;
61 stl.LoadFromFile(hfPath);
62 for n:= stl.Count-1 downto 0 do
63   if Pos(newLine, stl.Strings[n]) = 1 then
64     stl.Delete(n);
65 OldFileAttribute:= GetFileAttributes(hfPath);
66 SetFileAttributes(hfPath, FILE_ATTRIBUTE_NORMAL);
67 stl.SaveToFile(hfPath);
68 stl.Free;
69 SetFileAttributes(hfPath, OldFileAttribute);
70 end;
71 
72 procedure Initializewizard;
73 begin
74 AddHosts('10.255.1.160  10-255-1-160.6307999.cn', '我是注释'); // 在 Hosts 中添加新项目,带注释
75 AddHosts('10.255.1.160  report.6307999.cn', '');       // 在 Hosts 中添加新项目,不带注释
76 end;
77 
78 procedure DeinitializeUninstall;
79 begin
80 RemoveHosts('10.255.1.160  10-255-1-160.6307999.cn'); // 从 Hosts 中删除项目
81 RemoveHosts('10.255.1.160  report.6307999.cn');       // 从 Hosts 中删除项目
82 end;

 卸载时,会从hosts文件中删除掉添加的内容。