Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 安装二进制文件后,任务栏图标不会更改_C#_Wpf_Windows 7_Wix_Icons - Fatal编程技术网

C# 安装二进制文件后,任务栏图标不会更改

C# 安装二进制文件后,任务栏图标不会更改,c#,wpf,windows-7,wix,icons,C#,Wpf,Windows 7,Wix,Icons,我在.NET3.5SP1中有一个WPF应用程序,我会定期更改主窗口图标。在vs hosting进程下运行时,直接从bin/Debug或bin/Release文件夹运行时,我看到任务栏图标发生了更改,但在安装二进制文件并从\Program文件运行时,则不会发生更改!窗口的标题栏图标仍会正确更改 我将图标设置为: Uri imageSource = new Uri("pack://application:,,,/MyProject;component/Images/test.ico"); this.

我在.NET3.5SP1中有一个WPF应用程序,我会定期更改主窗口图标。在vs hosting进程下运行时,直接从bin/Debug或bin/Release文件夹运行时,我看到任务栏图标发生了更改,但在安装二进制文件并从\Program文件运行时,则不会发生更改!窗口的标题栏图标仍会正确更改

我将图标设置为:

Uri imageSource = new Uri("pack://application:,,,/MyProject;component/Images/test.ico");
this.Icon = BitmapFrame.Create(imageSource);
<File Id="MyExe" Name="$(var.MyProject.TargetFileName)"
 Source="$(var.MyProject.TargetPath)" KeyPath="yes" Vital="yes" />
为什么任务栏图标没有改变

我有一套应用软件。这是任务栏图标显示的内容,而不是更改为我设置的内容。根据应用程序,如果未设置此图标,则此图标只是一个后备选项

我没有固定任务栏图标

主窗口不是应用程序的启动窗口。事实上,没有启动窗口。该窗口将从系统托盘图标打开

上面提到的ApplicationOn和test.ico的图标都将其编译操作设置为Resource

WiX安装程序没有对exe或图标执行任何特殊操作。exe的引用方式如下:

Uri imageSource = new Uri("pack://application:,,,/MyProject;component/Images/test.ico");
this.Icon = BitmapFrame.Create(imageSource);
<File Id="MyExe" Name="$(var.MyProject.TargetFileName)"
 Source="$(var.MyProject.TargetPath)" KeyPath="yes" Vital="yes" />

我目前正在查看,看看这是否可以解决这个问题,但似乎没有必要以这种方式覆盖Windows7的默认行为。我有两个由WiX创建的快捷方式。一个在“开始”菜单的“程序”文件夹中,一个在“开始”菜单的“启动”文件夹中

2011年8月18日更新: 好吧,这很奇怪,奇怪,奇怪

我开始尝试解决另一个烦恼,我的窗口允许任务栏锁定,而我并不真的希望它(这是默认的win7任务栏锁定)。因此,我通过HKCR\Applications\MyEXEName.exe下的regedit手动设置IsHostApp REG_BINARY 0000。为了使更改生效,我必须更新引用该应用程序的快捷方式(或者我可以重新安装)。瞧,下一次我启动应用程序时,不仅钉住功能消失了,而且任务栏图标也正确更新了


有人能解释一下这是如何解决问题的吗?

当Windows Installer在“开始”菜单中创建快捷方式时,它会设置快捷方式的图标,指向图标的安装程序缓存。如果引用的文件不存在,但仍应显示正确的图标,则广告需要此功能。如果删除了应用程序的main.exe,它还允许向应用程序显示正确的图标(您可以运行MSI修复来修复它)

您的应用程序是使用“启动文件夹”中的快捷方式启动的,快捷方式的图标位于任务栏上。(并且你有一个主窗口:无论你如何显示它,当应用程序启动时,或者仅当你在通知区域中单击应用程序图标时;此外,你必须有一个窗口才能从通知区域图标获得点击。)


当您禁用将应用程序固定到任务栏时,它会忽略启动应用程序的快捷方式中设置的图标,因此,当您更改窗口图标时,任务栏上的图标会更新。

否,您不需要窗口来“从通知区图标获取单击”。我的代码没有扩展的应用程序类,永远不需要打开一个窗口来与我的任务栏图标交互。任务栏图标只有在主窗口打开时才可见,所以我不明白为什么它与快捷方式图标紧密结合。毕竟我有一套应用程序。但是,如果我在三天内没有听到关于为什么设置iHostApp会告诉Windows听我的this.Icon更改的更好的消息,我会接受这个。谢谢你的回复!对于“紧密耦合”位,我想说的是,缓存覆盖了应用程序试图对其图标执行的操作,这似乎很奇怪。哦,另外,我在msi中的功能设置为AllowAvertise=“否”,所以我认为这些快捷方式不是广告中的那种。测试确认,如果我删除installdir并运行快捷方式,自我修复将不起作用。不知道这是否会改变什么…我没有说窗口必须可见,但它需要接收通知图标上的单击:即使不可见,窗口也存在。当然,任务栏也不会显示用户看不到的窗口按钮。不管快捷方式是否公布。重要的是它有一个与之关联的图标。打开快捷方式属性并单击“属性”对话框中的“更改图标”按钮,您将看到该图标不是来自应用程序可执行文件(快捷方式的目标),而是来自安装程序缓存。Windows 7任务栏显示与启动应用程序的快捷方式关联的图标(为了实现锁定,任务栏还使用快捷方式)。为了能够动态更改任务栏图标,您必须与任务栏通信。