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
如果你发现依然是之前的资源文件,你应该:
- 检查打包后的文件和释放位置,尝试手动删除他们,排除文件锁定的情况
- 检查源代码中资源文件的引用名字
- 重启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"