安装在%ProgramFiles(x86)%时无法启动从Visual Studio Installer创建的已安装应用程序

时间:2012-05-04 00:01:48

标签: visual-studio-2010 visual-c++ deployment windows-installer uac

我刚刚使用C ++中的Visual Studio 2010 IDE完成了对D2D1应用程序的应用程序开发工作。我正在探索从中创建包的不同方法,并使用内置的Visual Studio安装程序/设置。安装项目编译顺利,并创建了一个安装文件。我也能够根据我的要求成功安装应用程序。但是,当我将它安装在默认位置(这将是我的首选位置 - C:\ Program Files(x86))时,应用程序拒绝启动。这是迄今为止我能够完成的调试:

  1. 安装在C:\ Program Files(x86)中:应用程序无法正常启动。
  2. 安装在C:\ Program Files(x86)中:应用程序在“以管理员身份运行”
  3. 时启动
  4. 安装在%ProgramFiles%或%ProgramFiles(x86)%以外的位置:应用程序正常启动,而不必“以管理员身份运行”。
  5. 我已尝试转错错误案例,但到目前为止还没有任何结论或说服力,这就是我在这里寻求专家帮助的原因。我做了进一步的工作:

    1. 使用Dependency Walker x86版本通过探查器确定dll调用的位置/内容。它没有提供任何具体的东西 - depends.exe相信我的应用程序有延迟加载依赖模块GPSVC.dll和IESHIMS.dll,我相当肯定我不需要那些。探查器还指示CRT 0xC0000417错误 - 但我很难说它是否相关。

    2. 我确实为我的视觉风格定义了一个清单作为编译指示。删除它没有用。

    3. 如果这有帮助 - 链接器设置中的我的C ++项目清单文件选项如下所示:

      • 生成清单 - 是
      • 允许隔离-Yes
      • 启用UAC - 是
      • UAC执行级别 - 作为调用者
      • UAC绕过用户界面保护 - 否
    4. 我已根据MSDN文档的建议将所有CRT功能转换为其安全版本(sprintf - > sprintf_s)。这甚至与此有关吗?

    5. 我试过简单地将.exe复制到%ProgramFiles(x86)%。它没有帮助 - 所以看起来我的安装程序不是创建问题的人。

    6. 我在代码中的几个地方使用_dupenv_s来检索%COMSPEC%,%TEMP%等。

    7. 高度赞赏任何有关如何进一步调试的指示。我确实读过这个,有些专家建议不正确的字符串处理或大或无效的目录名称;但我不认为这与我的案例相关,因为该问题通常在%ProgramFiles(x86)%下启动应用程序是唯一的。

      其他细节: *操作系统Windows 7 - 64位,Vista最新SP - 32位 * Visual Studio Professional 2010,带有.Net客户端配置文件目标的C ++项目 Visual Studio安装程序;目标平台32位 *应用性质 - 基于Direct2D

      如果我没有使用正确的技术术语,请原谅我。我是应用程序部署的新手。

1 个答案:

答案 0 :(得分:1)

这是正确的Viswanathan,如果您没有从提升的进程运行,则无法写入Program Files / Program Files(x86)。

如果您的应用程序需要在文件启动时在文件中编写自定义设置,则应在CommonAppDataFolder

下为其创建专用文件夹