找回密码
 立即注册
首页 业界区 安全 NI-VISA.NET运行时包提取

NI-VISA.NET运行时包提取

颖顿庐 前天 00:15
提取原因

官方不再提供运行时的安装包,下面以截止目前为止(2025-4-16)官方的安装包为例:
1.png

以上图片中可以从包含的版本一行中看到完整版两字,而最后一个提供运行时的版本则为18.5,如下图:
2.png

现在NI-VISA提供的完整包,提供了太多的功能,比如:LabVIEW相关的、开发者工具包、NI-MAX、IO-Trace等,导致文件体积太大,约为1.5G,如下图:
3.png

虽然目前的存储介质的存储容量都比较大,但是1.5G,需要拷贝(或下载)到作业环境中某些电脑配置低(或下载网速低)的时候,真的是让人难以忍受,因此才对完整包内容进行提取。
提取过程

环境

开发环境:Windows 11 x64、VS2022、
开发框架:WPF、NET Framework4.7.2
下载完整包

从以下网址下载安装包:
https://www.ni.com/zh-cn/support/downloads/drivers/download.ni-visa.html
操作平台为Windows,版本选择最新的,点击“离线安装”,弹出“下载脱机安装程序”的界面后,点击“下载”,图片可参考前面所述页面截图。
提取NI安装包

双击打开安装包,复制除了pool里面的内容外的其他文件夹及文件到名称为ni-visa-dotnet-runtime-25.3.0(名称可自定)文件夹内:
4.png

pool文件夹内包含了所有需要安装的安装包,为了能让Install.exe安装程序识别到安装包,必须在pool文件夹内放置VISA.NET运行时对应的安装包。
因此,需ni-visa-dotnet-runtime-25.3.0内新建pool文件夹。
双击Install.exe运行安装程序,点击肯定性的按钮或者选项,安装软件会安装NI Package Manager,再使用这个程序安装拓展名为.nipkg的安装包。
当到了以下页面的时候,点击“取消全选”,再点击“NI-VISA.NET运行引擎”(只保留这一个)
5.png

点击下一步之后,出现以下页面,根据拓展名为.nipkg的文件名称,如:eula-ivi_25.3.0.49221-0+f69_windows_x64.nipkg
6.png

在原来安装包最原始的pool内找到对应的文件,如下:

将其拷贝到新建空的pool文件内,不断重复以上操作,就可以把所有缺失的安装包找出来。
提取结果

文件对比

左边为原始pool文件夹内的文件,右边是提取之后pool文件夹内的文件,红色是未提取的,蓝色是已提取的。
8.png

9.png

测试

使用以上完整版安装的环境,开发串口数据传输的小软件。
在主窗体加载时引发Loaded事件,用以显示所有的资源名称、找到第一个/第二个串口资源以供后面串口数据通信:
  1.         private async void Window_Loaded(object sender, RoutedEventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 ResourceManager resourceManager = new ResourceManager();
  6.                 string info = await Task.Run(() =>
  7.                 {
  8.                     var resources = resourceManager.Find("?*");
  9.                     if(resources.ToArray() is string[] array && array.Length>=2 && array[0].Contains("ASRL") && array[1].Contains("ASRL"))
  10.                     {
  11.                         _firstResource = array[0];
  12.                         _secondResource = array[1];
  13.                         RS232Enabled = true;
  14.                     }
  15.                     string content = string.Empty;
  16.                     foreach (var resource in resources)
  17.                     {
  18.                         content += $"{resource}\n";
  19.                     }
  20.                     return content;
  21.                 });
  22.                 TextBlock1.Text = info;
  23.             }
  24.             catch(Exception ex)
  25.             {
  26.                 TextBlock1.Text = ex.Message;
  27.             }
  28.         }
复制代码
在按钮的Click单击事件引发串口通信,串口1发送当前时间到串口2,代码如下:
  1.         private async void Button_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             if (!(e.Source is Button button)) return;
  4.             RS232Enabled = false;
  5.             SerialSession session1 = null;
  6.             SerialSession session2 = null;
  7.             try
  8.             {
  9.                 string result1 = await Task.Run(() =>
  10.                 {
  11.                     //发送
  12.                     session1 = new SerialSession(_firstResource);
  13.                     //接收
  14.                     session2 = new SerialSession(_secondResource);
  15.                     session1.FormattedIO.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff}");
  16.                     string result = session2.FormattedIO.ReadLine();
  17.                     session1.Dispose();
  18.                     session2.Dispose();
  19.                     return result;
  20.                 });
  21.                 MessageBox.Show($"已收到 {result1}");
  22.             }
  23.             catch(Exception ex)
  24.             {
  25.                 MessageBox.Show(ex.Message);
  26.             }
  27.             finally
  28.             {
  29.                 session1?.Dispose();
  30.                 session2?.Dispose();
  31.             }
  32.             RS232Enabled = true;
  33.         }
复制代码
完整项目文件:下载
注:由于是电脑系统内之间的串口通信,没有用到物理串口,因此要使用VSPD虚拟串口软件,需自行下载
由于测试环境中的电脑没有物理串口,所以以上代码使用了第一个、第二个串口,如果自己测试用的电脑有物理串口,需根据实际情况更改以上代码
运行结果:
10.png

接着将以上程序拷贝到已经安装以上NI-VISA.NET运行时的系统上,进行验证,如果结果与上面图片一致,说明运行时可用。
我们也可以从以下路径的信息获取到安装包的依赖信息,以下图片为例,图片中Depends对应的值为:
Depends: ni-mdfsupport (>= 25.3.0), ni-metauninstaller (>= 25.3.0), ni-msiproperties (>= 25.3.0), ni-msvcrt-2015 (>= 14.1.5), ni-visa-shared-components (>= 5.11.0)
再依据Package的值就可以找到对应的安装包。
11.png

路径feeds\ni-visa内的文件夹存储着安装包的相关信息,也许只要对Packages、Packages.gz、Packages.stamp三个文件进行修改,就可以完全自定义安装显示及安装指定的安装包了。
有时间的话,可以自己研究,针对其他NI(National Intruments)的其他最新产品,也是如此之操作。
提取包

提取的安装包:ni-visa-dotnet-runtime-25.3.0.7z 网盘
提取码: 4i9e
其他安装方式

需要先安装NI Package Manager软件,用于对拓展名为nipkg的安装包进行安装。
分析pool文件夹的文件哪些是NI-VISA.NET运行时需要的安装包,点击安装,根据提示的安装文件缺失信息找到必要的安装包。
分析完之后,因安装包有依赖关系,所有就有安装的先后顺序,通过分析之后的安装包如下:
12.png

通过以上顺序安装,即可安装需要的运行时软件,且安装的内容是最少的。
提取的安装包:ni-visa-dotnet-runtime-portable_25.3.0.7z 网盘
提取码: kuxc

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册