LabVIEW可執行檔在Win7下的權限問題

        最近換用Windows7系統了,可是在用LabVIEW發佈可執行文件後出現了一個新的問題。那就是在進行一些文檔的讀寫操作時提示權限不夠。究其原因,是Win7採用了比XP更嚴格的權限等級。

        Win7把可執行文件的執行等級分爲3級:

asInvoker:以普通用戶權限運行程序,不會提示需要取得管理員權限,不能讀寫受保護的文檔。這也是LabVIEW發佈exe文件的默認等級。

highestAvailable:以能夠取得的最高權限運行程序。如果當前用戶只有普通用戶權限,則不會提示需要取得管理員權限,也不能讀寫受保護的文檔;如果當前用戶爲管理員權限,則在運行時彈出一個窗口提示需要確認使用管理員權限運行程序,確認後可以讀寫受保護的文檔。

requireAdministrator:運行時彈出界面,要求確認已管理員權限運行程序,或者要求輸入管理員密碼。確認後可以讀寫受保護的文檔。

由以上可以看出,我們需要把執行等級提高到requireAdmministrator才能正常的讀取受保護的文檔。而這個等級是由manifest屬性來控制的,要修改它需要使用微軟提供的manifest 工具即mt.exe.(在附件中提供了下載)

把mt.exe放到和要修改的exe文件相同的目錄下(不是必須這樣做,但這樣可以省去輸入長串的路徑),打開命令行cmd.exe並進入該目錄, 輸入以下命令(假設要修改的exe文件的名稱爲XXX.exe):

mt.exe -inputresouce:"XXX.exe" -out:"XXX.manifest"

該目錄下會生成一個XXX.manifest文件,用記事本打開,會看到它是一個XML格式的文檔,大體內容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

把其中的 level="asInvoker"修改爲level="requireAdministrator"並保存。

然後在命令行中輸入以下命令:

mt.exe -manifest "XXX.manifest" -outputresource:"XXX.exe"

如果沒有報錯,就修改成功了,exe文件的圖標上會多一個小盾牌,也可以刪除manifest文檔後再次執行第一條命令來確認。

如果報錯,很可能是拼寫錯誤。

參考文獻:

http://zone.ni.com/reference/en-XX/help/371361F-01/lvconcepts/uac_app_manifests_and_dgsn/

http://zone.ni.com/reference/en-XX/help/371361F-01/lvhowto/editing_app_manifests/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章