2

我正在编写一个Powershell script将为我创建 ConfigMgr 2012 应用程序的程序。此过程的一部分是将图标与应用程序相关联。

事实上,我这样做的方法确实附上了.ICO我告诉它的文件,但质量很糟糕。我将这个相同.ICO的文件附加到 GUI 中的现有应用程序中,它看起来很棒。我已经尝试了使用 System.Drawing.Bitmap 等的各种技巧System.Drawing.Image,但它要么抛出异常,因为它无法将其转换为 Byte 类型,要么当它不这样做时,应用程序在我的 ConfigMgr 控制台崩溃时我尝试查看它。

这是我当前的代码:

$icon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$x = [System.Drawing.Icon]::ExtractAssociatedIcon($FilePathToIcon)
$icon.Data = $x
return $icon

然后我继续将 $Icon 对象添加到我的 Application 对象中。我已经有了 .ICO 文件。在这一点上,我的想法是,如果我已经有一个 ICO 文件,我不应该提取一个图标,但对于我的一生,我无法弄清楚如何让这个东西具有良好的质量。

4

3 回答 3

1

问题似乎源于这样一个事实:如果您调用ExtractAssociatedIcon,您最多会得到一个 32 像素的图标。如果您想要原始图标文件的更大版本,则必须使用System.Drawing.Icon类的构造函数之一。所有的构造函数都可以在这个链接中找到。

限制为 32 像素

再一次,您会注意到,使用ExtractAssociatedIcon静态方法会将您的图标限制为 32 像素,即使原始文件大于该图标也是如此。

$Icon = [System.Drawing.Icon]::ExtractAssociatedIcon("C:\Users\Trevor\Downloads\Aaron-Sinuhe-Tv-Movie-Folder-Lord-Of-The-Rings-1.ico");
$Icon.Height; # 32px
$Icon.Width;  # 32px

获取更大的 Icon 实例

其中一个构造函数允许您在 . 之后指定[int] Width, 和[int] Height参数[String] FileName。假设您有一个大的(128px+ 正方形)ICO 文件c:\test\icon.ico,请查看以下代码。

$Icon = New-Object -TypeName System.Drawing.Icon -ArgumentList 'C:\test\icon.ico', 128, 128;
$Icon.Height; # 128px
$Icon.Width;  # 128px

或者,另一个构造函数允许您指定一个[String] FileName, 和[System.Drawing.Size] Size参数。

$Size = New-Object -TypeName System.Drawing.Size -ArgumentList 128, 128;
$Icon = New-Object -TypeName System.Drawing.Icon -ArgumentList 'C:\test\icon.ico', $Size;
$Icon.Height; # 128px
$Icon.Width;  # 128px
于 2014-01-13T01:26:57.240 回答
1

我正在尝试向 sccm 应用程序添加一个图标,但我很困惑我该怎么做。所以我有以下代码来添加应用程序:

创建应用程序。

$app = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Application

设置应用程序属性。

$app.Title = $name
$app.Publisher = $publisher
$app.SoftwareVersion = $release

准备本地化的显示信息。

$info = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.AppDisplayInfo

设置本地化的应用程序名称。

$info.Title = $name
$info.Language = "en-US"

保存显示属性。

$app.DisplayInfo.Add($info)

我可以使用第一个答案中提到的代码将图标导入对象:

"

$icon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$x = [System.Drawing.Icon]::ExtractAssociatedIcon($FilePathToIcon)
$icon.Data = $x
$info.icon = $icon

"

但如前所述,从这种方式添加图标,图标在 SCCM 的软件目录上质量很差。

我不能在 powershell 中使用提到的大图标代码。

于 2017-02-02T15:59:47.950 回答
0

我最近在获取图标文件时遇到了同样的问题并遇到了这篇文章。发现 .data 属性要求“byte[]”数据。所以,找到了可以把文件变成字节的东西。System.IO.File 似乎完成了这项工作。到目前为止只针对一个 Icon 文件进行了测试,但它似乎有效。试试看,让我知道它是否适合你。

$SCCMIcon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
$SCCMIcon.data = [System.IO.File]::ReadAllBytes("$Icon")
$info.Icon = $SCCMIcon
于 2017-02-11T04:21:54.640 回答