【问题标题】:Permanent customized folder icons with InnoSetup in any computer在任何计算机中使用 Inno Setup 永久自定义文件夹图标
【发布时间】:2012-09-08 00:56:19
【问题描述】:

我修改了一些文件夹图标,并将这些文件夹包含在我的 InnoSetup 安装中。问题是,一旦安装了我的程序,我的自定义文件夹图标就消失了,我看到的只是老式的“黄色”Windows 文件夹图标。

编辑

答案由用户 TLama 提供。起初它在我的电脑上工作。我在不同的计算机上使用不同的 Windows 版本时遇到了一些问题。在几个计算机系统中成功尝试后,我现在将编写我的工作代码。

使用的图标:

  • Ico1.ico
  • Ico2.ico
  • Ico3.ico

修改后的文件夹图标:

  • c:\FDR1
  • c:\FDR2\FDR3

第 1 步:

我使用“文件夹图标更换器”软件为我想要更改的三个文件夹设置了我的图标。您也可以使用任何其他免费软件。执行后,每个新更改的图标文件夹中都会出现一个desktop.ini。例如,FDR1 有以下内容:

[.Shellclassinfo]
Iconfile=F:\Resource\Icons\Ico1.ico
Iconindex= 0

第 2 步:

然后我删除了上面的路径并将“Ico1.ico”保存到我刚刚修改的目录“c:\FDR1”中:

[.Shellclassinfo]
Iconfile=Ico1.ico
Iconindex= 0

我对 Ico2.ico(在 FDR2 内部)和 Ico3.ico(在 FDR3 内部)做了同样的事情。 “Icon1、2 和 3”和“desktop.ini”文件属性都设置为隐藏。但是,重要的是不要将图标属性设置为“只读”。

第 3 步:

Inno 内部重复 TLama 的建议。

#define OutputDirectory_1 "c:\FDR1"
#define OutputDirectory_2 "c:\FDR2"
#define OutputDirectory_3 "c:\FDR2\FDR3"

[Dirs]
Name: {#OutputDirectory_1}; Attribs: system
Name: {#OutputDirectory_2}; Attribs: system
Name: {#OutputDirectory_3}; Attribs: system

[Files]
Source: "c:\FDR1\Ico1.ico"; DestDir: {#OutputDirectory_1}; Attribs: hidden system
Source: "c:\FDR2\Ico2.ico"; DestDir: {#OutputDirectory_2}; Attribs: hidden system
Source: "c:\FDR2\FDR3\Ico3.ico"; DestDir: {#OutputDirectory_3}; Attribs: hidden system

第 4 步:

编译!

现在,您的文件夹图标将在任何计算机和系统中永久有效!!

【问题讨论】:

  • 您不必在标题中加上 [SOLVED];将答案标记为已接受就足够了。请查看this Meta SO post 了解更多信息。
  • 如果您找到答案,请将其作为答案发布,而不是替换一半问题。

标签: installation inno-setup


【解决方案1】:

您的目标文件夹应配置为只读或系统属性。要创建这样的文件夹,您可以使用,如 Miral 提到的,[Dirs] 部分及其属性。这将有一个好处,即在您运行安装过程后,InnoSetup 会自动通知 Shell 有关更改,因此文件夹图标将更改而无需额外的通知函数调用。

; this is a defined preprocessor variable used to simplify the script
; management; this variable contains the path, where the icon will be 
; applied (it's used twice in a script, so it's easier to manage that
; from one place)
#define OutputDirectory "d:\TargetDirectory"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output

[Files]
; here you need to use "hidden" and "system" values in Attribs parameter
; to include into the Desktop.ini file hidden and system file attributes
Source: "Desktop.ini"; DestDir: {#OutputDirectory}; Attribs: hidden system

[Dirs]
; here you need to use either "readonly" or "system" value in Attribs parameter
; to setup to the output directory read only or system file directory attribute
Name: {#OutputDirectory}; Attribs: readonly

重要:

不要忘记,无论何时更改输入 Desktop.ini 文件的内容以及更改预处理器路径变量(我已经错过了几次,然后想知道安装包的内容)。

【讨论】:

  • 非常感谢 TLama !我已经测试过了,它现在可以在我的应用程序中使用。明天我将在另一台计算机和不同的驱动器上进行测试。也很有可能会好起来的。
  • 不客气!无论如何,如果可以的话,也尝试在 Windows XP 上对其进行测试。我目前只有 Windows 7,因此无法验证,但据我记忆,规则相同。
【解决方案2】:

为了激活自定义文件夹图标,您必须以编程方式设置包含desktop.ini 文件的文件夹的“只读”属性。 (您无法从 Explorer 执行此操作,但您可以通过命令行和 Inno 执行此操作。)

[Dirs]
Name: {app}; Attribs: readonly

注意desktop.ini文件内的路径必须在用户的文件系统上有效;您可能希望使用 [Ini] 条目来创建或修改此文件以适应安装路径。

(这实际上并不使文件夹成为只读文件夹——Windows 对文件夹的处理方式不同,因为只有文件可以有意义地只读。)

【讨论】:

  • 谢谢,但它没有用。我应该只添加两行: "[Dirs]" 和 "Name: {app}; Attribs: readonly" 吗?安装后我的文件夹仍然是黄色的。正如我所说,desktop.ini 中没有路径。是故意抹去的。通过擦除路径,我可以在我的分区硬盘和其他硬盘上的其他文件夹和驱动器中移动文件夹。结果是自定义文件夹保持自定义。但是,用 Inno 安装后,嗯……你知道的。每个文件夹都有一个 *.ini 和一个 *.ico。如果您或任何人能给我更多解决这个问题的方向,那就太好了。
  • 您还需要确保desktop.ini 文件有Attribs: system hidden。在[Setup] 下使用ChangesAssociations=yes 也可能会有所帮助,它告诉Windows 刷新其图标缓存,尽管我不认为这是必需的。
猜你喜欢
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
相关资源
最近更新 更多