在 Inno Setup Run 部分命令中扩展 .NET 路径常量时的错误处理/忽略

2023-12-10

我有一个 .NET DLL。可以通过以下方式注册RegAsm.NET 3.5 和 .NET 4.5。

我在我的设置脚本中使用以下代码:

[Run]
Filename: "{dotnet40}\RegAsm.exe"; Parameters: "my.dll"; WorkingDir: "{app}"; Flags: skipifdoesntexist; StatusMsg: "Registering Controls."
Filename: "{dotnet4064}\RegAsm.exe"; Parameters: "my.dll"; WorkingDir: "{app}"; Flags: skipifdoesntexist; StatusMsg: "Registering Controls."
Filename: "{dotnet20}\RegAsm.exe"; Parameters: "my.dll"; WorkingDir: "{app}"; Flags: skipifdoesntexist; StatusMsg: "Registering Controls."
Filename: "{dotnet2064}\RegAsm.exe"; Parameters: "my.dll"; WorkingDir: "{app}"; Flags: skipifdoesntexist; StatusMsg: "Registering Controls."
  • 如果目标计算机上安装了 .NET 3.5 和 .NET 4.5,则效果良好
  • 我的脚本中有一个函数可以检查 .netInitializeSetup。所以我知道系统上安装了以下版本之一: v3.5 v4 v4.5

But

在某些情况下我们会遇到这样的错误:如果目标机器上没有 .NET 3.5

我猜错误原因是:

{dotnet20}

.NET Framework 2.0 版根目录。 {dotnet20} 相当于 {dotnet2032},除非安装在 64 位中运行 模式,在这种情况下它相当于 {dotnet2064}。

如果尝试在不存在 .NET Framework 2.0 版的系统上扩展此常量,则会引发异常。

我的问题是如何处理和忽略此异常并防止安装回滚:

内部错误:找不到 .Net Framework 2.0 版。


如果你想坚持[Run]部分并且不要将其写入脚本代码中,那么我认为您没有太多选项可供选择。每当常量无法扩展时就会引发异常,这就是这种情况。我能想到的唯一选择是添加Check函数将尝试扩展常数受保护的 try..except引发异常时阻止并阻止处理条目。类似如下(根据您的代码,缩短):

[Run]
Filename: "{dotnet20}\RegAsm.exe"; Parameters: "File.dll"; Check: RegAsmDotNet20Exists

[Code]
function RegAsmDotNet20Exists: Boolean;
begin
  try
    // process the entry only if the target binary could be found (and so the
    // folder constant could have been properly expanded)
    Result := FileExists(ExpandConstant('{dotnet20}\RegAsm.exe'));
  except
    // this is the fallback in case the folder constant could not be expanded,
    // or something unexpected happened when checking if the binary file to be
    // executed exists; in such case, don't process the entry
    Result := False;
  end;
end;

另一个更干净、更安全的选择是纯粹从[Code]一些安装后事件中的部分。即使您在使用这些常量时仍然需要捕获异常,但您可以更好地控制该工具(例如,如果该工具使用它,您可以获取退出代码来获取错误原因)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Inno Setup Run 部分命令中扩展 .NET 路径常量时的错误处理/忽略 的相关文章

随机推荐

  • (可选)启动活动并使用来自 Android 服务的通知。仅在某个应用程序存在时启动或通知

    我在自己的应用程序中重用了一项服务 它既是 绑定 又是 启动 服务 因为它进行了很多我感兴趣的有用数据采集 一切正常 但我注意到一个问题 这段代码抛出异常 Intent dialogIntent new Intent dialogInten
  • Opencover 可以与 TypeMock 隔离器一起使用吗?

    我正在寻找一个 NET 覆盖工具 并且一直在尝试 PartCover 但取得了不同程度的成功 我看到开盖旨在取代 PartCover 但到目前为止我无法将其与 TypeMock Isolator 链接 因此我的模拟测试在收集覆盖信息时通过
  • 如何着手创建一款赛道游戏? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我计划在 Android 中制作赛车游戏 我已经使用不同的移动技术创建了许多应用程序 但我对游戏应用来说几乎是初学者 所以我的问题是如何在 android 中制作赛道 我应该如何
  • Android 中的 SQL 查询 - 搜索整个或部分字符串

    我对 SQL 查询没有太多经验 所以在找到问题的解决方案时遇到了一些麻烦 我有一个书签列表 例如 Facebook 开发者控制台 Stack Overflow 我还有他们的 URL 列表 http m facebook com https
  • 如何通过javascript获取值translateX

    使用 JavaScript 初始化内容元素 content children 0 style transform translateX 200 px scaleX 1 6 scaleY 1 2 如何获取该元素的translateX 值 您可
  • Python 中的 NZEC 错误

    这是一段简单的代码 假设读取 n 个数字并打印这 n 个数字中有多少个数字可以被 k 整除 n int raw input k int raw input ans 0 while n gt 0 t int raw input if t k
  • Codeigniter连接查询多个条件不起作用

    我想使用连接查询从数据库表中选择数据 但它不起作用 我的查询 this gt db gt select this gt db gt from we this gt db gt join schedule schedule itemid we
  • 如何在Python中从一组线性方程中绘制平面?

    我有一个包含三个方程的线性系统 x1 2x2 x3 0 2x2 8x3 8 4x1 5x2 9x3 9 解集是 29 16 3 它是这些平面相交处的点 希望有人可以使用 Matplotlib 在 3D 空间中绘制这些平面 以便清楚地可视化问
  • 屏蔽文本框验证文本错误

    我在处理从 WinForms 应用程序上的屏蔽文本框提取的日期变量时遇到一些问题 尝试读取用户输入日期的代码如下 DateTime datExpDate new DateTime datExpDate DateTime txtExpDate
  • System.IO.DirectoryInfo.Exists 有其他选择吗

    The System IO DirectoryInfo Exists如果我给出这样的 UNC 总是返回 false 192 168 0 33 Others F 仅当我从已安装的应用程序运行时才会发生这种情况 否则如果路径为真 它将返回 tr
  • 应用程序文档目录的物理路径

    应用程序文档目录的物理路径是什么 在 Mac OS X Lion 上 我知道该文件夹中的每个应用程序都有 UUID 但直到现在才在我的系统上找到它 Open 用户 用户名 库 应用程序支持 iPhone 模拟器 4 3 2 应用程序 假设使
  • 多分区作业的批处理脚本?

    我正在开发一个项目 该项目在大型计算集群的两个不同分区上运行程序 我想使用批处理脚本来运行它 但搜索后 仍然不清楚是否 如何从单个批处理脚本中在两个不同的分区上分配和运行程序 这就是我想做的事情 bin bash SBATCH partit
  • ajax 在 Flask 视图中发布数据

    这是我的视图功能 app route share methods GET POST def share form ShareForm request form if request method POST title form title
  • 如何计算包含特定值的 XML 节点的数量

    我正在寻找如何计算 XML 文件中包含 否 值的节点以及元素总数 我的元素计数工作正常 但我不确定在 XML 内部查找要计数的值的逻辑 为了获得我正在使用的总数 XmlDocument readDoc new XmlDocument rea
  • 如何在 beforeload 事件中获取 Extjs 4 商店的请求数据?

    我正在尝试在商店加载事件之前获取请求数据参数 我可以看到操作对象包含请求数据 但我似乎无法从操作对象获取它 Ext create Ext data Store autoLoad true fields name item code type
  • 如何使用 luasql 创建 Sqlite3 数据库?

    我正在尝试使用 luasql 创建 Sqlite3 数据库 之后我requireluasql sqlite3 如何在文件上创建数据库 另外 我似乎找不到 luasql 的手册 任何地方都可以使用吗 如果数据库不存在 SQLite 将自动创建
  • 在 Windows 批处理中转义特殊字符

    我有一个批处理文件 它接收路径作为第一个参数 该路径始终由特殊字符组成 例如 or 调用类似于这样 D Script gt MyBatch My path test 00170 LASTNAME Firstname image 总是出现这个
  • 我当前在 Eclipse MacOS Big Sur 上进行 GDB 调试时遇到错误

    在 Big Sur 上通过 Homebrew 安装 GDB 后 我目前遇到了一个奇怪的错误 我已经正确配置了 Eclipse 的所有内容 我的 GDB 链接为调试器 但是 每次我尝试启动调试时 都没有任何反应 并且控制台中出现以下内容 00
  • e.keyCode 不起作用

    我想问你一些对我不起作用的事情 如果你能帮助我的话 Html
  • 在 Inno Setup Run 部分命令中扩展 .NET 路径常量时的错误处理/忽略

    我有一个 NET DLL 可以通过以下方式注册RegAsm NET 3 5 和 NET 4 5 我在我的设置脚本中使用以下代码 Run Filename dotnet40 RegAsm exe Parameters my dll Worki