2012-08-16 82 views
0

我對Inno Setup FileExists函數有困惑。使用網絡/共享資源的奇怪Inno安裝行爲

這裏的情況。我有三臺聯網的計算機,具有類似WORKGROUP名稱的計算機。 1)視窗7 32位 2)的Windows 7 64位 3)的Window XP服務包3

1)和3)已經設置爲具有讀寫股,購自服務器。 ShareExe和ShareData

有問題的Inno Setup會在ShareExe文件夾中創建可執行文件的快捷方式。它要求用戶輸入服務器的ComputerName,然後使用FileExists驗證正確的輸入。

在XP(3)機器上運行此安裝程序並指定1)的計算機名稱工作得很好,但是,在Win7 64位PC上運行安裝程序並指定與XP相同的ComputerName時,會導致FileExtsts測試失敗。

奇怪的是,我可以去網上鄰居並打開ShareExe文件夾併成功運行可執行文件。我的問題是,「爲什麼Inno FileExists僅在Win 7 64位機器上失敗?」在參考資料中找不到任何與FileExists有任何版本差異的內容。 (我也嘗試過使用相同的結果FileSearch)。

TIA

回答

1

在Windows 7(和Vista)與UAC啓用,由管理員與非管理員上下文之間沒有共享默認網絡憑據和驅動器映射,即使是相同的用戶。

默認情況下,Inno提升爲管理員權限(通過PrivilegesRequired=admin),因爲大多數安裝必須(且應該)由管理員用戶每臺計算機執行。但是,這意味着瀏覽桌面時提示或保存的任何憑據都無法使用。

當通過API直接訪問文件(如使用FileExists)時,Windows通常會嘗試使用與登錄到PC時相同的用戶名/密碼以靜默方式連接到服務器;如果這失敗了,那麼它只報告一個錯誤,因爲它無法在那個時候提示替代憑證。所以,如果你可以確保兩臺PC上的登錄細節是相同的,那麼它應該可以工作。 (你通常在連接到域的計算機上獲得這個免費的,但不是工作組。)

如果這是不可能的,那麼你可以嘗試的其他東西是通過shell對話框強制訪問 - if FileExists失敗,然後使用GetOpenFileName提示用戶使用相同的初始路徑在該文件夾中查找特定文件。我沒有測試過這個,但我認爲這應該會導致Windows顯示證書提示,然後您應該可以繼續。

(如果這是一個內部應用程序,那麼另一個選項是禁用[通過安全策略設置]或UAC的完全分離,雖然後者不是一個好主意。當然,這不是一個好主意,對於一個普通版本的應用程序是可以忍受的,而且如果你無論如何解決這個問題的話,它就會更加乾淨。)

+0

謝謝你這個深思熟慮的答案。由於這個應用程序是普遍可用的,用戶是非專業人士,我希望你的GetOpenFileName建議是一個很好的解決方案。不幸的是,瀏覽文件夾對話框不接受默認的文件夾參數(\\ {computername} \ ...),因此用戶必須找到共享的根文件夾並導航到可執行文件,我認爲這會阻擋大部分目標用戶。有沒有驗證服務器計算機名稱的方法? (提示用戶輸入)。 – 2012-08-17 16:32:37

+0

您需要使用文件瀏覽器,而不是文件夾瀏覽器。關於具體路徑,我假定由於您只是提示計算機名稱,所以您已經知道至少一個有趣文件的共享名稱和路徑。如果情況並非如此,那麼還有其他一些方法來驗證計算機名稱,但是您應該選擇類似於您的應用程序將如何使用它的東西 - 例如。如果你的應用程序連接到它作爲數據庫服務器,然後做同樣的驗證它。如果你的應用程序打開一個特定的端口套接字,然後做同樣的事情。等等。 – Miral 2012-08-18 02:18:44