c# - 使用 Powershell 创建 ConfigMgr 应用程序时图标质量不佳

标签 c# .net powershell image-processing sccm

我正在编写一个 Powershell 脚本,它将为我创建 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 文件,我就不应该提取图标,但我一生都无法弄清楚如何以良好的质量获得这个东西。

最佳答案

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

限制为 32px

您会再次注意到,使用 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

关于c# - 使用 Powershell 创建 ConfigMgr 应用程序时图标质量不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21081605/

相关文章:

c# - .NET 在不同时区和不同区域设置的 SQL 中存储 DateTime

c# - .net 中有光纤 api 吗?

.net - Wcf 请求生命周期

引用函数时 PowerShell 退出事件不起作用

c# - Web Api——即发即弃

c# - MVC Paypal 集成

powershell - 奇怪的PowerShell Exec输出捕获行为

PowerShell:在 while true 循环中进行错误检查?

c# - WPF:应用程序在 Visual Studio Debug模式下的运行速度比可执行文件慢得多

.net - 用作事件接收器的 CCmdTarget 的正确生命周期管理是什么?