Mageを使用して作成されたClickOnceアプリケーションは、コントロールパネルの[プログラムの追加と削除]でMageコマンドラインパラメーターに指定されたアイコンを表示していません。
私は次のようないくつかのブログを読みました:
レジストリキーを編集せずにこれを実現するにはどうすればよいですか?出来ますか?
Mageを使用して作成されたClickOnceアプリケーションは、コントロールパネルの[プログラムの追加と削除]でMageコマンドラインパラメーターに指定されたアイコンを表示していません。
私は次のようないくつかのブログを読みました:
レジストリキーを編集せずにこれを実現するにはどうすればよいですか?出来ますか?
レジストリを編集せずにこれを行う方法はありませんが、プログラムで行うことができます。アイコンが配置に含まれていることを確認する必要があります。アセンブリの説明を製品名と同じ文字列に設定したので、アセンブリの説明を検索することで、適切なアプリケーションのアンインストール文字列を調べることができます。このように、このコードで製品名をハードコーディングする必要はありません。
private static void SetAddRemoveProgramsIcon()
{
//only run if deployed
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
&& ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
try
{
Assembly code = Assembly.GetExecutingAssembly();
AssemblyDescriptionAttribute asdescription =
(AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(code, typeof(AssemblyDescriptionAttribute));
string assemblyDescription = asdescription.Description;
//the icon is included in this program
string iconSourcePath = Path.Combine(System.Windows.Forms.Application.StartupPath, "youriconfile.ico");
if (!File.Exists(iconSourcePath))
return;
RegistryKey myUninstallKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall");
string[] mySubKeyNames = myUninstallKey.GetSubKeyNames();
for (int i = 0; i < mySubKeyNames.Length; i++)
{
RegistryKey myKey = myUninstallKey.OpenSubKey(mySubKeyNames[i], true);
object myValue = myKey.GetValue("DisplayName");
if (myValue != null && myValue.ToString() == assemblyDescription)
{
myKey.SetValue("DisplayIcon", iconSourcePath);
break;
}
}
}
catch (Exception ex)
{
//log an error
}
}
}