2011-08-17 161 views
1

我們擁有Buffalo NAS驅動器作爲備份驅動器。Windows服務無法識別網絡路徑。什麼是解決方法?

當我們將此驅動器映射爲B:\時,我們的備份應用程序似乎理解這一點,並將其作爲應用程序運行。

但是,作爲服務運行時,它無法識別映射和崩潰。

我試圖給出路徑爲\\\192.168.x.x\Backups\作爲備份路徑,服務運行,但然後很多子模塊失敗,因爲它看到\\\作爲轉義字符。

什麼是解決方法,以便Windows服務可以看到映射的驅動器。

我想通過CreateProcess()運行zip.exe;

""C:\Users\jvenkatraj\Documents\SQLite\Debug\zip.exe" -9 -q -g -u "\\\192.168.123.60\Backup\store\location1\50\f2\25\43\d8\88\b9\68\49\8d\2b\d0\08\9e\7e\df\z.zip" "\\\192.168.123.60\Backup\store\temp\SPD405.tmp\file_contents""

反斜槓與引號搞亂。它是一個WCHAR類型,我不能將其更改爲任何其他類型,否則我將不得不在其他地方重新定義。我應該使用多少個反斜槓?

+2

請注意,您必須通過預置兩個反斜槓來指定您的UNC路徑:\\ 192.168.x.x \ Backups。 – Hans

+0

我在問題中添加了兩個後擋板,但在發佈後,它只顯示一個。讓我更新我的問題 – roymustang86

+0

澄清,是作爲系統服務安裝的自己的代碼還是第三方應用程序安裝的備份應用程序?這個應用程序是否在zip.exe上調用CreateProcess? –

回答

1

您可以使用WNetAddConnection2 API函數在服務本身內映射網絡驅動器。

0

這樣做很可能會訪問網絡路徑

string path = @"\\192.168.x.x\Backups\"; 

你必須確保的另一件事情最簡單的方法是,服務就可以訪問此路徑。如果您的服務以無權訪問的用戶身份登錄,則必須將服務的登錄憑據更改爲有權訪問此路徑的用戶/域帳戶。

+0

你有它 - 映射驅動器是每會話,所以服務不能使用用戶的映射驅動器。雖然服務可以使用UNC路徑。 –

+0

@安德魯,確實你是對的。 –

1

創建符號鏈接的地方到NAS共享:

mklink /D c:\nas-backups \\192.168.x.x\Backups 

,並指出您的備份應用程序c:\nas-backups\etc

+0

這很棒。你能告訴我如何使它在XP和2003上工作嗎? – roymustang86

+0

糟糕。對不起,符號鏈接是在Vista/WS2008中引入的。它們在XP和2003上不可用。 –

0

嘗試在「看到」網絡用戶(如「網絡服務」用戶或甚至映射網絡驅動器的「人」用戶)下運行您的服務。