IShellLink::SetIconLocation 将我的图标路径转换为 ​​%Program Files% 这是错误的

2024-04-10

有谁知道如何纠正这种行为?

目前,当我们的安装程序安装我们的应用程序时,它会获得一个IShellLink,然后加载我们的快捷方式图标(在开始菜单和桌面中)所需的数据,然后使用IPersistFile::保存写出快捷方式。

问题是为图标指定的路径,通过IShellLink::设置图标位置,转化为使用%程序文件%...对于 x64,这是错误的。

我注意到很多其他 32 位软件在 x64 下都会出现此问题 - 但后来我假设他们正在使用%程序文件%它们本身,作为其 .lnk 创建代码中的文字元素。然而,似乎是这样的IShellLink迫使这个错误存在,并且我没有解决方法(或者可能是外壳程序中的链接属性编辑器负责该问题并且底层链接没问题)。

一些谷歌搜索没有发现任何结果...还有其他人遇到过这个问题或者知道如何强制 x64 windows 不把这个搞砸的文章/示例吗?

澄清示例:

hr = m_shell_link->SetIconLocation("C:\\Program Files (x86)\\Acme\\Prog.exe", 0);

将生成具有正确图标的快捷方式,但是当您在快捷方式属性页面中按“更改图标”时,将报告“Windows 找不到文件 %ProgramFiles%\Acme\Prog.exe。”)


将名称转换为短文件名,它只会转换驱动器号,但保留正确的路径。

        PWCHAR pIcon = L"C:\\Program Files (x86)\\Myfoo\\Bar.exe";
        DWORD dwLen = GetShortPathName(pIcon, NULL, 0);
        PWCHAR pShort = NULL; 
        if (dwLen) {
            pShort = new WCHAR[dwLen];
            dwLen = GetShortPathName(pIcon, pShort, dwLen);
            if (!dwLen) {
                delete [] pShort;
                pShort = NULL;
            }
        }

        if (NULL == pShort) {
            psl->SetIconLocation(pIcon,iTmp);
        } else {
            psl->SetIconLocation(pShort,iTmp);
        }
        delete [] pShort;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IShellLink::SetIconLocation 将我的图标路径转换为 ​​%Program Files% 这是错误的 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 如果 JSON.NET 中的值为 null 或空格,则防止序列化

    我有一个对象需要以这样的方式序列化 即 null 和 空白 空或只是空格 值都不会序列化 我不控制对象本身 因此无法设置属性 但我知道所有属性都是字符串 环境NullValueHandling显然 忽略 只能让我找到解决方案的一部分 它 似
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • C# 编译器数字文字

    有谁知道 C 编译器数字文字修饰符的完整列表 默认情况下 声明 0 使其成为 Int32 声明 0 0 使其成为 Double 我可以在末尾使用文字修饰符 f 来确保某些内容被视为 Single 例如像这样 var x 0 x is Int
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • 如何在dll级别读取app.config? [复制]

    这个问题在这里已经有答案了 我在一个解决方案中有一个控制台应用程序项目和库项目 dll The 图书馆项目有 app config 文件 我在其中存储我在库中使用的一些键值对 控制台应用程序引用此 dll 我有另一个 app config
  • 在哪里可以下载没有 Visual Studio 2010 的 C# 4.0 编译器?

    我知道 CTP VS 2010 映像 但我可以只下载 NET Framework 4 0 和 C 编译器吗 AFAIK VS 2010 CTP 仅作为 VM 映像提供 我不相信 Microsoft 发布了 VS 的安装程序 其中一个绝对不适
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section

随机推荐

  • 运行进程隐藏的Python

    我是 python 新手 正在编写新代码 需要一些帮助 主要文件 import os import time import sys import app import dbg import dbg import me sys path ap
  • Internet Explorer 和剪辑路径

    据我所知 clip path 应该在 IE 中工作 如许多文章和本教程中所示CSS 屏蔽 http www html5rocks com en tutorials masking adobe redirect from locale fr
  • 创建自签名 SSL 证书时出错

    我尝试根据链接中的说明创建自签名证书mosca MQTT 代理的安全密钥和证书 https stackoverflow com questions 39913842 security key and cert for mosca mqtt
  • 将实体框架中的字符串列映射到枚举

    有没有办法将字符串列映射到实体模型中的枚举 我已经在 Hibernate 中完成了此操作 但在 EMF 中无法弄清楚 可能是更好的版本 OrderStateIdentifier 字段用于 JSON 序列化和数据库字段 而OrderState
  • Spring Boot MongoDB 连接问题

    我的 Spring Boot 应用程序正在尝试连接到 MongoDB 数据库 配置添加到 application yml 文件中 直到昨天 该应用程序在本地运行得完全正常 但是今天当我在本地主机上本地运行它时 我收到以下错误 2020 12
  • ngClass 中的多个类

    我正在尝试在 ngClass 中添加多个值 该值过去适用于以前的 alpha 版本 但现在似乎不适用于 angular2 beta i i 它会产生一个错误 异常 类型错误 无法读取未定义的属性 add fa fa star 在 PostV
  • 策略模式和命令模式的区别

    两者有什么区别策略模式 http en wikipedia org wiki Strategy pattern和命令模式 http en wikipedia org wiki Command pattern 我也在寻找一些 Java 的例子
  • 我可以将其序列化为 json 字符串并查看它,而不是使用反射来循环访问类属性吗?它有什么缺点吗?

    假设我有一个像下面这样的课程 class Student public int ID get set public string Name get set 只是还有 10 个属性 我想循环遍历这些属性 我可以通过反射来完成 这会有性能成本
  • 使用 ODataQueryOptions 扩展导航属性

    我正在构建一个 OData v 4 Web 服务 该服务必须公开从另一个第 3 方 Web 源检索的数据 因此该数据与 LINQ 世界中的任何内容都不相同 即 没有 IQueryable 没有 Context 什么都没有 解决方法似乎是手动
  • 在 Win32 上构建适用于 Android (ARMv7) 的 OpenSSL

    如何在 Win32 上构建适用于 Android ARM v7 使用 Android NDK 的 OpenSSL 直到 OpenSSL 的出现wiki http wiki openssl org index php Android和 set
  • 如何在 JMeter 中使用命令行参数

    我正在使用 Jmeter 测试 API 我想从终端参数化项目的路径 然后我想在 JMeter 中使用此参数 我通过命令行发送的参数 jmeter n t your script jmx Jurl abcdef com 我在用户定义变量中使用
  • 使用 itext pdf stamper 在 pdf 中添加多个附件

    我想在一个 pdf 文件中添加多个附件 当我进入循环时 它只附加最后一个附件 示例代码 PdfReader reader new PdfReader FILE PdfStamper stamper new PdfStamper reader
  • 在 Android Studio 中丢失对静态数据的引用

    当我的应用程序进入后台时 我遇到静态数据实例丢失的问题 从而导致空指针异常错误 静态数据非常依赖于上下文或 状态 并且通常不能在初始化时生成 为了确保我保留这些数据 我是否会被迫将数据写入存储 或者是否有其他方法来确保我的静态数据在应用程序
  • win10 应用程序 - 在列表顶部的新项目中添加动画

    我正在制作一个新闻源应用程序 它会定期将新内容添加到列表顶部 当我检查新商品时 可能有几十件或只有一件 我想要的是让最旧的新项目能够看到 这样他们就可以继续向上滚动以获取更新的故事 遗憾的是 该平台并不是免费提供的 然而有趣的是 它确实是免
  • 使用 pysnmp 从 MIB 文本约定转换 OID 值对

    我正在尝试编写一段代码 它接受一个 JSON 对象 其中 OID 作为键 OID 值作为值 一个例子是 1 3 6 1 4 1 562 29 6 2 3 Link Down 收到此 JSON 对象时 我想使用 PySNMP 转换 OID 和
  • 在哪里提供 NSURL 值?

    每次我运行该应用程序时 它都会崩溃并且控制台显示 由于未捕获的异常 MissingDatabaseURL 而终止应用程序 原因 无法获取 FirebaseDatabase 实例 在 FIRApp 中或从您的 databaseForApp U
  • 从文件名中提取版本

    这是我的示例文件名Text 2 23 txt我已经分离了扩展 但无法获取版本 因此我可以稍后在代码中使用它进行比较 我需要得到2 23 out 编辑 文件名可以采用多种形式 但版本始终位于文件名的末尾 string s f1 Name To
  • 如何在 Ruby 中将 JSON 转换为 XML?

    有没有办法在 Ruby 中将 JSON 转换为 XML require active support for to xml gem install activesupport use the 2 3 branch require json
  • 为什么我的 C# winforms 应用程序中的第一个 HttpClient.PostAsync 调用非常慢?

    我有一个像这样的 httpclient var client new HttpClient 我像这样发布 var result client PostAsync endpointUri requestContent 并得到这样的响应 Htt
  • IShellLink::SetIconLocation 将我的图标路径转换为 ​​%Program Files% 这是错误的

    有谁知道如何纠正这种行为 目前 当我们的安装程序安装我们的应用程序时 它会获得一个IShellLink 然后加载我们的快捷方式图标 在开始菜单和桌面中 所需的数据 然后使用IPersistFile 保存写出快捷方式 问题是为图标指定的路径