提取原因
官方不再提供运行时的安装包,下面以截止目前为止(2025-4-16)官方的安装包为例:
以上图片中可以从包含的版本一行中看到完整版两字,而最后一个提供运行时的版本则为18.5,如下图:
现在NI-VISA提供的完整包,提供了太多的功能,比如:LabVIEW相关的、开发者工具包、NI-MAX、IO-Trace等,导致文件体积太大,约为1.5G,如下图:
虽然目前的存储介质的存储容量都比较大,但是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(名称可自定)文件夹内:
pool文件夹内包含了所有需要安装的安装包,为了能让Install.exe安装程序识别到安装包,必须在pool文件夹内放置VISA.NET运行时对应的安装包。
因此,需ni-visa-dotnet-runtime-25.3.0内新建pool文件夹。
双击Install.exe运行安装程序,点击肯定性的按钮或者选项,安装软件会安装NI Package Manager,再使用这个程序安装拓展名为.nipkg的安装包。
当到了以下页面的时候,点击“取消全选”,再点击“NI-VISA.NET运行引擎”(只保留这一个)
点击下一步之后,出现以下页面,根据拓展名为.nipkg的文件名称,如:eula-ivi_25.3.0.49221-0+f69_windows_x64.nipkg
在原来安装包最原始的pool内找到对应的文件,如下:
将其拷贝到新建空的pool文件内,不断重复以上操作,就可以把所有缺失的安装包找出来。
提取结果
文件对比
左边为原始pool文件夹内的文件,右边是提取之后pool文件夹内的文件,红色是未提取的,蓝色是已提取的。
测试
使用以上完整版安装的环境,开发串口数据传输的小软件。
在主窗体加载时引发Loaded事件,用以显示所有的资源名称、找到第一个/第二个串口资源以供后面串口数据通信:- private async void Window_Loaded(object sender, RoutedEventArgs e)
- {
- try
- {
- ResourceManager resourceManager = new ResourceManager();
- string info = await Task.Run(() =>
- {
- var resources = resourceManager.Find("?*");
- if(resources.ToArray() is string[] array && array.Length>=2 && array[0].Contains("ASRL") && array[1].Contains("ASRL"))
- {
- _firstResource = array[0];
- _secondResource = array[1];
- RS232Enabled = true;
- }
- string content = string.Empty;
- foreach (var resource in resources)
- {
- content += $"{resource}\n";
- }
- return content;
- });
- TextBlock1.Text = info;
- }
- catch(Exception ex)
- {
- TextBlock1.Text = ex.Message;
- }
- }
复制代码 在按钮的Click单击事件引发串口通信,串口1发送当前时间到串口2,代码如下:- private async void Button_Click(object sender, RoutedEventArgs e)
- {
- if (!(e.Source is Button button)) return;
- RS232Enabled = false;
- SerialSession session1 = null;
- SerialSession session2 = null;
- try
- {
- string result1 = await Task.Run(() =>
- {
- //发送
- session1 = new SerialSession(_firstResource);
- //接收
- session2 = new SerialSession(_secondResource);
- session1.FormattedIO.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss fff}");
- string result = session2.FormattedIO.ReadLine();
- session1.Dispose();
- session2.Dispose();
- return result;
- });
- MessageBox.Show($"已收到 {result1}");
- }
- catch(Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- finally
- {
- session1?.Dispose();
- session2?.Dispose();
- }
- RS232Enabled = true;
- }
复制代码 完整项目文件:下载
注:由于是电脑系统内之间的串口通信,没有用到物理串口,因此要使用VSPD虚拟串口软件,需自行下载
由于测试环境中的电脑没有物理串口,所以以上代码使用了第一个、第二个串口,如果自己测试用的电脑有物理串口,需根据实际情况更改以上代码
运行结果:
接着将以上程序拷贝到已经安装以上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的值就可以找到对应的安装包。
路径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运行时需要的安装包,点击安装,根据提示的安装文件缺失信息找到必要的安装包。
分析完之后,因安装包有依赖关系,所有就有安装的先后顺序,通过分析之后的安装包如下:
通过以上顺序安装,即可安装需要的运行时软件,且安装的内容是最少的。
提取的安装包:ni-visa-dotnet-runtime-portable_25.3.0.7z 网盘
提取码: kuxc
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |