CloseMaxScript6 资源文件

资源是指主插件用到的图片、额外的dll文件等
通过资源打包将他们归纳到单个文件

这不会加密你的文件,释放后的效果与你手动拷贝到目标目录的方式没有区别

单个文件可以便于用户使用和打包发布
但需要注意的是单个文件太大也会影响启动速度

打包时指定资源文件

--filePath --文件路径
--releaseName:"" --释放后的新文件名,默认使用输入文件名
--compress:false --是否开启压缩(文件太小可能导致压缩后尺寸更大)
--writeToLocal:true --是否写入本地
config.AddResourcesFile @"C:\Users\trykle\Desktop\file1.dll"
config.AddResourcesFile @"C:\Users\trykle\Desktop\file2.dll" releaseName:"new_file_name.dll" compress:true
--在6.12版本及以后,允许嵌套一层文件夹
config.AddResourcesFile @"C:\Users\trykle\Desktop\file2.dll" releaseName:@"mytest\new_file_name.dll"

文件将以字符串编码形式保存在打包的ms文件中

文件释放机制

文件释放时机是在前置动作之前
如果检查到有存在文件名,则不会进行释放(打包时config.ClearResources=false时),你需要自行控制文件的版本
这个操作和你手动复制文件到指定位置没有差异

释放前清理

将在释放前,尝试删除同名文件
如果你的资源不经常变化,则可以考虑不必清理,在有新版本的资源文件时直接改名

config.ClearResources = true

如果你发现依然是之前的资源文件,你应该:

  1. 检查打包后的文件和释放位置,尝试手动删除他们,排除文件锁定的情况
  2. 检查源代码中资源文件的引用名字
  3. 重启3dmax

文件释放位置

使用maxscript访问

-- C:\Users\%USERNAME%\AppData\Local\cmxsres
resDir = (dotNetClass "System.Environment").GetFolderPath((dotNetClass "System.Environment+SpecialFolder").LocalApplicationData) + @"\cmxsres\"

--上面的太长了,或者这样
resDir = @"C:\Users\" + sysInfo.username + @"\AppData\Local\cmxsres\"

关于卸载

释放目录看起来像是一个垃圾站
如果你的插件包含了卸载逻辑,请在卸载时也删除这些文件
为避免不同插件之间的出现删除错误的冲突情况,请将你的资源文件名字特殊处理,最大程序确保名字不与别人重复

resDir = (dotNetClass "System.Environment").GetFolderPath((dotNetClass "System.Environment+SpecialFolder").LocalApplicationData) + @"\cmxsres\"
deleteFile (resDir + "myfile.png")

从内存中获取

product = Cmxs6Container.MxsRuntime.Call "LastTool"
bytes = product.Call "GetResources" @"your.dll"
posted @ 2023-11-06 17:47  trykle  阅读(70)  评论(0编辑  收藏  举报