日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oommf 提示 mmArchive 保存场文件失败

發布時間:2024/1/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oommf 提示 mmArchive 保存场文件失败 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 問題描述
  • 原因分析:
  • 解決方案:
    • 1.在mmarchive.tcl源碼中注釋掉檢查場文件“所有者”屬性的語句
    • 2.新建一個非管理員用戶來運行 oommf

問題描述

最近第一次在操作系統為 Windows Server 的(云)服務器上使用 oommf 的過程中,發現 oommf 的子程序 mmArchive 不能將(OVF格式)場文件保存到 .mif 文件所在的目錄中。在(云)服務器上的用戶類型為“Administrator”,即管理員用戶。
這里使用新版本的oommf(OOMMF 2.0 beta 0 (30-Sep-2022)),它能更加詳細的提示 oommf 保存文件失敗的原因,如下:

< XX> mmArchive 2.0b0 warning:
Error replying to socket message
‘datafile {C:/Users/ADMINI~1/AppData/Local/Temp/XXX C:/Users/Administrator/XXX}’:
Can’t move file C:/Users/ADMINI~1/AppData/Local/Temp/XXX to C:/Users/Administrator/XXX:
File “C:/Users/ADMINI~1/AppData/Local/Temp/XXX” not owned by current user (BUILTIN/Administrators vs.XXX/Administrator)
(Net_Protocol)

從提示框中可以看出,oommf 提示需要保存的場文件不屬于當前用戶。但是,我們可以在 oommf 的默認緩存目錄中(C:/Users/ADMINI~1/AppData/Local/Temp/XXX)找到該場文件,只不過它的文件名并不規范。


原因分析:

oommf 的各個子程序之間是模塊化設計的,專門用于加載 .mif 文件并計算的子程序 Oxsii / Boxsi 會將需要保存的每一個場文件都存放在緩存目錄 “C:/Users/ADMINI~1/AppData/Local/Temp/XXX” 中,專門用于保存文件的子程序 mmArchive 會將緩存目錄中的場文件移動到用戶指定的輸出目錄(默認情況下就是 .mif 文件所在的目錄),接著對它以約定好的命名風格進行重命名。

在 mmArchive 移動緩存目錄中的場文件到輸出目錄之前,它會先對緩存目錄中的場文件進行一系列的文件屬性識別,詳情參考 oommf\app\mmarchive\mmarchive.tcl中的 proc CheckFileMove { f1 f2 errmsg_var } 函數,其中關于對場文件的“所有者”屬性的識別語句如下:

if {![file owned $f1]} {set errmsg "File \"$f1\" not owned by current user"set sidfile [Oc_WinGetFileSID $f1]set siduser [Oc_WinGetCurrentProcessSID]set fileowner [Oc_WinGetSIDAccountName $sidfile]set user [Oc_WinGetSIDAccountName $siduser]if {[string compare $fileowner $user]!=0} {append errmsg " ($fileowner vs. $user)"} elseif {[string compare $sidfile $siduser]!=0} {append errmsg " ($sidfile vs. $siduser)"}if {[Oc_AmRoot]>0} {global tcl_platformif {[string compare windows $tcl_platform(platform)]==0} {append errmsg \"\nOOMMF applications should not be run as administrator"} else {append errmsg \"\nOOMMF applications should not be run as root"}}return 0 ;# Require ownership}

通過判斷場文件的“所有者”屬性,從而 mmArchive 知道了該文件的“所有者”不屬于當前用戶,于是就報錯了。而且根據源碼中 if {[Oc_AmRoot]>0} 的提示可知:oommf 不應該被“管理員”用戶(即Windows操作系統中的Administrator用戶,Linux操作系統中的Root用戶)運行。


解決方案:

暫時找到兩個解決方法:

1.在mmarchive.tcl源碼中注釋掉檢查場文件“所有者”屬性的語句

這是最簡單的方法!首先,完全關閉 oommf 。接著在 oommf\app\mmarchive\mmarchive.tcl 中的 proc CheckFileMove { f1 f2 errmsg_var } 函數里面直接注釋掉關于檢查場文件“所有者”這一屬性的語句,即注釋掉上文出現的代碼片段。最后,無需重新編譯,直接打開 oommf,就可以正常保存場文件了。

不過,由于本人并沒有了解過 oommf 的源碼,對它的設計思想也不了解,所以并不清楚在源碼中注釋掉這一代碼片段會有什么潛在的影響,或者說場文件的“所有者”屬性對 oommf 到底有什么作用。 但目前來看,確實沒看出有什么影響。

2.新建一個非管理員用戶來運行 oommf

這個方法稍微麻煩一點!在不修改 oommf 源碼的情況下,根據上文代碼片段中的錯誤提示信息,我們不用管理員的用戶身份去運行 oommf,而是新建一個普通用戶來運行。

關于如何在Windows Server(Windows 10 類似)上新建用戶的操作請參考:
windows server 2012r2 如何新建一個用戶并且可以遠程登錄

關于在遠程登錄新建用戶的賬號時可能遇到的問題,請參考:
連接被拒絕 因為沒有授權此用戶賬戶進行遠程登錄
windows server 2016 開啟多用戶登陸

總結

以上是生活随笔為你收集整理的oommf 提示 mmArchive 保存场文件失败的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。