2012-01-11 50 views
8

我有一個VB6應用程序鏈接到Windows 7 32位機器的幾個POS終端。 POS終端映射到Windows 7機器,我可以從資源管理器或通過cmdline/shell從Windows 7機器訪問POS終端。在Windows 7上的VB6應用程序無法訪問映射的驅動器

該應用程序已更新爲ADO 2.8,並且所有其他控件和組件都不再有源代碼,因此已被重新編寫。經過一些煩人的打嗝後,我得到了應用程序在Windows 7計算機上重新編譯沒有錯誤。

現在問題來了。 VB6應用程序無法看到或導航到任何映射的驅動器!我已經嘗試過UAC設置;我已將應用程序設置爲在Windows XP SP3模式下運行;我曾嘗試以管理員身份運行。這些東西(以及這些東西的許多排列)都不起作用。

關於如何使這項工作的任何建議?

+0

如何設定要在Windows XP SP3模式下運行?當*不在該模式下運行時會發生什麼? – Gabe 2012-01-11 01:26:30

+0

您將其設置爲以兼容模式運行,並將其設置爲使用Windows XP SP3作爲兼容模式。這是通過右鍵單擊鏈接並使用屬性完成的。實際上,當我使用這種兼容模式運行它時沒有區別。 – 2012-01-11 01:45:10

+1

當您嘗試導航到映射的驅動器時會發生什麼? UNC路徑怎麼樣? – Gabe 2012-01-11 01:58:37

回答

4

我相信你有麻煩,因爲隨便驅動器映射是每個用戶,並在UAC系統上管理員組用戶有兩個單獨的上下文(每個令牌一個:SU &提升)。

有一種系統級驅動映射,這是在系統用戶(NT Authority \ System)下完成的。當您在該帳戶下映射驅動器並持續映射驅動器時,所有用戶都可以看到並使用該映射(受限於那裏文件的常見訪問權限)。

您這樣做的正常方式是通過域級GPO(組策略對象),這意味着如果在公司管理的LAN環境中賄賂您的本地Box控制器。工作組中的機器執行此

的一種方式是經由AT命令來映射函作爲系統,從一個升高命令提示:

at 8:53 am "net use m: \\MediaShare\MyLibrary 
    ThePW /user:MediaShare\TheUser /persistent:yes > nul" 

有遠程服務器是MediaShare,用戶TheUser,密碼ThePW,以及上午8點53分是在未來一兩分鐘,以避免意外調度明天。

但是由於會話0隔離,Vista和更高版本會失敗!

因此...使用第三種替代方法Run CMD.exe as Local System Account這與ForcePush對How to map a network drive to be used by a service的回覆中提到的內容相同。

我相信這就是你在這之後。

+0

感謝您的意見。在這種情況下,驅動器映射最初是作爲登錄用戶的本地映射而建立的。我認爲這可能是導致問題的原因,然後讓網絡支持人員設置用戶,以便根據您的建議或通過登錄腳本配置由GPO設置的映射。無論哪種情況,結果都是一樣的。登錄的用戶可以查看並導航到映射的驅動器,並可以使用資源管理器或通過命令行訪問所有文件。但是,VB6應用程序無法在運行時「查看」或訪問共享。 – 2012-01-11 16:34:14

+0

通常,登錄腳本僅爲非登錄用戶登錄設置映射。 VB6程序運行的憑據究竟是什麼?同一個用戶?一名高級用戶?其他用戶? – Bob77 2012-01-11 18:16:22

+0

該應用程序使用登錄用戶的憑據運行。從應用程序的角度來看,這是所有需要的。 – 2012-01-12 14:25:43

8

添加此註冊表設置爲我解決了問題:http://technet.microsoft.com/en-us/library/ee844140%28v=ws.10%29.aspx

要解決此問題,請配置EnableLinkedConnections 註冊表值。此值可使Windows Vista和Windows 7至 共享已過濾的訪問令牌和管理員組成員 完整管理員訪問令牌之間的網絡連接。配置此註冊表值後,如果網絡資源映射到訪問令牌,LSA會檢查是否存在與當前用戶會話關聯的另一個訪問令牌 。如果LSA 確定存在鏈接的訪問令牌,則會將網絡 共享添加到鏈接的位置。要配置EnableLinkedConnections 註冊表值

  1. 單擊開始,鍵入regedit在開始的程序和文件框, 然後按ENTER鍵。

  2. 找到並右鍵單擊註冊表子項HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System。

  3. 指向新建,然後單擊DWORD值。

  4. 鍵入EnableLinkedConnections,然後按Enter。

  5. 用鼠標右鍵單擊EnableLinkedConnections,然後單擊修改。

  6. 在數值數據框中,鍵入1,然後單擊確定。

  7. 退出註冊表編輯器,然後重新啓動計算機。

+0

這爲我工作,專門爲通用USB安裝程序http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3。 – 2015-08-02 23:56:05

0

不知道如果你想通了這一個了,但對我來說這是CHDIR命令(即使使用註冊表修復以上)。

我在我的代碼

ChDir "P:\Temp\VidCap\Cam1\" 'I almost never use ChDir Open "list.txt" For Output As #1

和所有的VB6內置的文件中的命令直直的看着雖然任何操作,沒有錯誤,什麼都沒有。我通過明確的路徑解決了這個問題(在我的代碼中它是一個字符串,但你可以明確指出):

dd = "P:\Temp\VidCap\Cam1\" Open dd & "list.txt" For Output As #1 按預期工作。

希望這有助於

^h

相關問題