我有一個使用表達式VB6使用Write#1,(UnitCount
Write #1, (UnitCount
寫一個文本文件中。(UnitCount是第一個被寫了幾個短整數遺留VB6系統。)
這種運作良好,在XP下卻不會產生沒有錯誤報告在Vista和Windows 8的文本文件。
有誰知道如何解決這一問題?
另外 - VB6應用程序安裝在C:/ Program Files/IronDuke
並且文本文件也打算在此處寫入(即,在當前目錄中)。
我知道右括號。我只包括了部分聲明。
我有一個使用表達式VB6使用Write#1,(UnitCount
Write #1, (UnitCount
寫一個文本文件中。(UnitCount是第一個被寫了幾個短整數遺留VB6系統。)
這種運作良好,在XP下卻不會產生沒有錯誤報告在Vista和Windows 8的文本文件。
有誰知道如何解決這一問題?
另外 - VB6應用程序安裝在C:/ Program Files/IronDuke
並且文本文件也打算在此處寫入(即,在當前目錄中)。
我知道右括號。我只包括了部分聲明。
您的應用程序被視爲遺留問題(不支持Vista),因此您寫入受保護位置的文件將被虛擬化(而非「隔離」),而不會導致安全違規異常。文件系統VirtualStore存在於每個用戶的配置文件路徑中。
VB6完全可能嵌入應用程序清單,儘管它不會爲您生成一個清單。您只需單獨創建清單文件,然後將其作爲類型#24和Id#1的自定義資源包含在內,並且將被編譯進去。
一個警告是清單文件應該是UTF-8 XML 填充到4個字節的偶數倍。如果需要填充,則可以在末尾添加空格。您可以將它從記事本保存爲ANSI,因爲通常只使用7位ASCII字符子集,這樣可以避免出現UTF-8 BOM的風險,您不希望Notepad寫入。
當需要時,甚至有很簡單的方法可以繞過WOW64重定向,雖然沒有很好的理由這樣做。
但相反,如果程序確實將此文件寫入其當前目錄,則可能會發現修改開始菜單快捷方式或創建新快捷方式要容易得多。只需將快捷方式的當前目錄(「開始」)設置爲一些可讀寫的位置,如Documents目錄,D:驅動器上的某個目錄,Public專用文件夾等。
該文件實際上是創建的,你只是無法找回它。它存儲在獨立的存儲器中。
這是現代Windows版本中的一個appcompat功能,從Vista開始。程序不能再寫入c:\program files
。或c:\program files (x86)
,這是您在64位操作系統上寫入的目錄。 UAC可以保護這些目錄免受惡意軟件和意圖良好但危險的程序的侵害,因此程序必須通過顯示UAC提示來讓用戶知道它將進行可能會影響其機器的重大更改,從而獲得更高的權限。
由於您的VB6 EXE文件看起來像一個非UAC意識的古老程序,它非常準確的猜測,它將自動將文件重定向到獨立存儲以允許您的程序正確執行。讀迴文件也沒有問題。但當然不是你實際想要完成的。
使您的程序顯示UAC提升提示有點棘手,VB6並未設計爲在EXE文件中嵌入清單。 15年前不存在清單。您需要在與yourapp.exe文件相同的目錄中創建一個名爲yourapp.exe.manifest文件的文件。使用可寫入UTF-8編碼的文件(不是VB6)文本編輯器,使它看起來像這樣:
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>
請注意,您仍然有一個64位操作系統上的一個嚴重問題,你會最終寫入c:\ program files(x86)而不是c:\ program files。沒有簡單的解決方法。考慮尋找更適合現代操作系統的現代工具,VB.NET肯定會給你帶來更少的麻煩。
正在使用什麼文件系統路徑文件。您有可能無法在Vista或更高版本中訪問它。另外,你確定沒有關閉「)」嗎? –