插件自动更新选项在 addin.def 中定义。是什么促使我提出这个愿望清单请求呢? JMP19 发布后,我注意到它新增了一个插件自动更新功能,JMP 会检查“安装文件夹”中的文件更新。但这个功能的实现方式有点“笨拙”,最终导致我们之前搭建的一些基础架构出现问题。
您希望看到哪些改进?这些选项不应分散在“视图”>“插件”设置中,而应直接写入所有插件都需要的 addin.def 文件中。这将使现有基础架构的管理更加便捷,也便于逐步实现 JMP 的部分强大功能。
为什么这个想法很重要?我想把这个功能提升到一个新的水平。这的确是个很棒的想法,但目前的实现方式很容易给其他人带来问题。在我现有的架构中,我们会对照一个主列表来检查更新,以便了解何时发布了新版本。JMP 的这个功能或许可以减少一些这方面的工作,但它的布局还需要更精细的设计。例如:
1. 插件已从正确位置安装,一切正常……但之后用户无法访问该位置,需要更新。我将 jmpaddin 文件提供给他们,以便他们继续使用。他们将该文件拖入 JMP……现在,安装源可能变成了下载文件夹,导致他们无法收到更新通知……如果将正确的安装源硬编码到 def 文件中,则可以避免这种情况。
2. 测试插件。与第 1 点类似,如果您有一个专门存放测试文件的文件夹,安装测试文件会将安装位置更改为测试位置,这样一来,当正式版发布新版本时,测试插件就不会收到通知。此外,根据文件名的命名方式,测试插件是否收到新版本通知也未必会收到……因为测试版本通常会“移交”,文件名中包含版本号……所以更新检查无法实现完全匹配的文件名。
在这两个例子中,JMP 的一些做法确实有其价值,但部署团队需要对插件的更新标记方式拥有更大的控制权。可能还有其他例子,但我认为这些足以推动将更新相关的“机制”纳入 addin.def 文件,并在其中添加一个或多个变量。
谢谢!
自动化和脚本编写回复:Addin.def 中已编码的 Addin 自动更新选项感谢@nathan-clark强调这些问题。
与“根据主列表检查更新”相比,新方法的速度如何?[例如@Justin_Chilton 的 Add-In Manager 中的]
回复:Addin.def 中已编码的 Addin 自动更新选项@hogi ,我还没有做过任何速度测试。主要是因为它给我的其他部署带来了问题,我感到很恼火。我怀疑整体速度应该会更快,因为 JMP 似乎只检查文件名的新修改,而不是我与实际版本发布日期的比较。速度还将根据 JMP 引用的“源”文件夹来确定。
回复:addin.def 中已编码插件自动更新选项 - 状态已更改为:已确认感谢您抽出时间提出这个请求!这是非常宝贵的反馈。
回复:addin.def 中定义的插件自动更新选项@nathan-clark你能提供一下这个功能及其当前实现方式的文档吗?我不明白这个实现方式具体包含哪些内容,也找不到任何相关信息。你是说 JMP 会在用户最初打开 .jmpaddin 文件的文件夹里查找吗?那它具体会查找什么呢?是查找文件名不同但 addindef 中插件 ID 相同的 .jmpaddin 文件吗?还是查找 addindef 中插件版本号相关的内容?或者是查找文件名相同但内容不同的文件?
回复:addin.def 中定义的插件自动更新选项@hardner我不确定是否有相关文档。我掌握的信息来自我自己的测试/观察,以及我与 JMP 技术支持的交流。当时我注意到 JMP 19 会询问我一些插件的更新检查问题。
是的,如果您转到“查看”>“加载项”,您应该能够看到我描述的一些项目……您应该会看到一个“安装源”部分以及一个“更新”下拉列表……如果下拉列表设置为“检查更新……”,JMP 将监视列出的安装文件夹,而且目前还不容易或不可能更改。
我不确定 JMP 是如何监控的。我猜想可能是同一个文件名为 .jmpaddin 的文件,只是修改日期更新?但我可能猜错了……我的主要问题是控制其中的一些组件。
我已经有了自动更新的基础架构,所以我不希望 JMP 监控任何内容,我希望这个设置由插件本身完成,而不是由用户手动选择。
2. 如果我确实希望 JMP 进行监控,我希望能够控制 JMP 如何监控更新——例如强制监控 PROD 文件夹,这样用户就可以上传测试用的 .jmpaddin 文件,而不会影响对 PROD 的监控。
对我来说,通过 addin.def 文件来定义这些设置是最合理的……而且如果用户确实想要覆盖默认设置,仍然可以使用“视图”>“插件”选项。但是,无论其底层规则是什么,当前的实现方式都会破坏我已经构建并用于部署插件套件的基础架构的某些方面。
这样有帮助吗?
回复:addin.def 中定义的插件自动更新选项默认情况下自动启用公司 AddIn 的更新功能(通过 AddIn 中的设置)将带来翻天覆地的变化!
风险极大,用户可能会忘记激活更新功能,从而被迫使用旧版本。
在插件中进行设置比在本地首选项中进行设置要好得多。如何保证所有 100 个用户都在本地首选项中启用该功能?
回复:addin.def 中定义的插件自动更新选项根据我们的经验:
监控同名文件
- 当文件为新文件时(即使版本号未更改),也会触发更新。
更改文件夹中的其他文件不会影响该机制。
与UpdateCheck@AddInManager 相比的优势:
-多个插件可以同步更新
- 静默模式(虽然我不敢这么做——但知道哪个插件更新了还是挺好的)
回复:addin.def 中定义的插件自动更新选项相反,我希望没有人使用自动更新功能……直到我对自动更新的其他方面拥有100%的控制权为止 
回复:addin.def 中定义的插件自动更新选项感谢@nathan-clark和@hogi 。我已经提交了支持请求,询问有关此问题的详细信息。我完全同意应该能够控制与此行为相关的选项。
回复:addin.def 中定义的插件自动更新选项所以,如果@nathan-clark想要重新获得控制权——不允许手动选择该选项,那么“强制设置”功能将会很有帮助。
对我来说,对默认设置进行一些选择就足够了。
当从 SharePoint 安装加载项并同步到本地 OneDrive 时,每个用户都会有自己的安装路径。
从网络驱动器安装时,强制“自动更新”使用默认路径可能很有帮助。
回复:addin.def 中定义的插件自动更新选项同意!这也是我希望它可以通过 addin.def 文件进行编码的原因之一。
我最不喜欢的一点是安装源会发生变化……比如你的 SharePoint @hogi ,如果他们安装的是测试版,那么安装源可能会被更改为测试版的位置……这样,如果创建了新的生产环境,他们就不会收到通知。
诸如此类的小事可能会破坏现有的基础设施/路径
好在,我认为要支撑多条道路的“升降机”并不难。
回复:addin.def 中定义的插件自动更新选项如果您从 SharePoint 下载文件,然后从“下载”文件夹打开它,自动更新将不会执行任何操作,因为它假定该文件已安装到本地。我当时合作的客户希望此功能允许指定一个远程位置来检查更新(例如他们的公司服务器、SharePoint 或其他位置)。无论用户如何打开文件,都会指定一个官方位置,例如在 addin.def 文件中指定为查找更新的位置。如果该位置无法访问,也不会出现错误。
回复:addin.def 中定义的插件自动更新选项@hardner你可以同步你的 SharePoint 文件夹,这样它就会像本地文件夹一样显示在你的文件资源管理器中。在 SharePoint 位置中通常会有一个“同步”按钮,点击后它会变成一个本地同步文件夹,可以像访问你硬盘上的任何其他文件夹一样访问。
如果他们直接下载文件,你说的没错,这也会“破坏”预期的路径。
我不能百分百确定所有公司都是这样,但至少我们公司是这样的……可能还有一个“创建 OneDrive 快捷方式”的按钮。功能类似,但我尽量不用这个按钮(以后有机会再细说)。
回复:addin.def 中定义的插件自动更新选项明白了。我使用同步功能,但我也加入了一些不允许我同步的 SharePoint 群组。我首先想到的是下载类似这样的文件,这样我就“拥有”这个文件了。不过,我主要是想指出,这种逻辑只有在用户直接从官方更新位置打开 .jmpaddin 文件时才有效,而且我不确定如何强制他们这样做,而不是下载、通过电子邮件发送文件或其他方式。
回复:addin.def 中定义的插件自动更新选项没错,这很有道理。我觉得 JMP 的思路很有意义,可以简化很多麻烦事……我最想做出改变的原因是他们的实现方式破坏了我的系统
但有了合适的控制措施,我或许可以弃用一些基础设施,转而依赖 JMP 的实现方式!
回复:addin.def 中定义的插件自动更新选项AddinLoad.jsl怎么样?
- 将安装文件覆盖为公司标准
- 如果 Test-Dir 为真:显示警告,提示已安装测试版本 - 建议用户从官方源安装正式版
- 如果 InstallationDir=Download -> 禁用更新
我们只需要找到信息保存的位置,然后读取、访问和更改它。
回复:addin.def 中定义的插件自动更新选项addinload 文件可能会比较挑剔,这取决于你如何使用它们以及 JMP 安装文件的顺序。我的程序是基于按需加载的库构建的……但我以前也用过 addinload。我的系统其他方面都非常稳定——直到 JMP 把选项还给用户为止 
对我来说,最重要的是,如果 JMP 的东西比我的好,我会用,但我不想被迫使用 JMP 的东西。
回复:addin.def 中定义的插件自动更新选项啊,找到了:
Open(
"$USER_APPDATA_ALL/addinRegistryV2.xml",
XML Settings(
Stack( 0 ),
Row( "/AddinReg/Addins/Addin/@id" ),
Col(
"/AddinReg/Addins/Addin/@id",
Column Name( "Addin.id" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
),
Col(
"/AddinReg/Addins/Addin/@timeStamp",
Column Name( "Addin.timeStamp" ),
Fill( "Use Once" ),
Type( "Numeric" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
),
Col(
"/AddinReg/Addins/Addin/@installSource",
Column Name( "Addin.installSource" ),
Fill( "Use Once" ),
Type( "Numeric" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
),
Col(
"/AddinReg/Addins/Addin/@installSourceTimeStamp",
Column Name( "Addin.installSourceTimeStamp" ),
Fill( "Use Once" ),
Type( "Numeric" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
),
Col(
"/AddinReg/Addins/Addin/@autoUpdate",
Column Name( "Addin.autoUpdate" ),
Fill( "Use Once" ),
Type( "Numeric" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
),
Col(
"/AddinReg/Addins/Addin/@updatePrompt",
Column Name( "Addin.updatePrompt" ),
Fill( "Use Once" ),
Type( "Character" ),
Format( {"Best", Use thousands separator( 0 ), 15} ),
Modeling Type( "Continuous" )
)
),
XML Wizard( 0 )
);
只需移除 autoUpdate 标签,你的同事就只能依赖你稳定可靠的实现方案了。
或许可以安装一个 UpdateCheck 插件,它可以检查设置、调整设置,并在设置错误时发出警告。
回复:addin.def 中定义的插件自动更新选项哦,很有意思@hogi !这看起来确实是个值得尝试的变通方法
JMP 支持团队还给了我一些 JSL 代码,可以用来在更新时关闭该设置,我也需要研究一下。
Names Default To Here( 1 );
/* Installing Add-In:
Open( Add-In to open,
<CHECK for="" updates="">
, // "always" will check for updates at startup and while jmp is running
<UPDATE prompt="">
) // whether or not the add-in will silently update or prompt first */ Open( \\NetworkLocation\addins\test.jmpaddin, Check For Updates( "never" ), Update Prompt( 0 ) );
</UPDATE>
</CHECK>
回复:addin.def 中定义的插件自动更新选项啊,太好了!
最好设置一个批处理脚本来更新:
运行所有插件安装程序并调整设置。