【问题标题】:Bad icon quality when creating a ConfigMgr application with Powershell使用 Powershell 创建 ConfigMgr 应用程序时图标质量不佳
【发布时间】:2014-01-12 23:20:48
【问题描述】:

我正在编写一个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 文件,我不应该提取一个图标,但我终其一生都无法弄清楚如何让这个东西具有良好的质量。

【问题讨论】:

  • 嗯,这很有趣。过去我在导入太大的图标时遇到过问题。我想知道这是否是基类库中的 Icon 类的问题?你能确认 Icon 类在“提取”期间没有弄乱它吗?

标签: c# .net powershell image-processing sccm


【解决方案1】:

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

限制为 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 实例

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

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

或者,another constructor 允许您指定 [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

【讨论】:

    【解决方案2】:

    我正在尝试向 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 中使用大图标的代码。

    【讨论】:

      【解决方案3】:

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

      $SCCMIcon = New-Object Microsoft.ConfigurationManagement.ApplicationManagement.Icon
      $SCCMIcon.data = [System.IO.File]::ReadAllBytes("$Icon")
      $info.Icon = $SCCMIcon
      

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 2011-02-09
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多