2012-01-31 71 views
3

代碼爲服務如下:.NET Windows服務的system32文件夾下執行批處理文件無法安裝文件夾

  System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process 

      var arguments = 
       String.Format("--ip {0} --user {1} --passwd {2} --guest {3} --gpasswd {4} --action {5}", 
           controllerIPAddress, controllerUsername, controllerPassword, username, password, action); 

      proc.StartInfo.Arguments = arguments; 

      proc.StartInfo.FileName = "C:\\Program Files\\Netspot\\ControllerInterfaceService\\batchfile.bat"; 

      proc.StartInfo.RedirectStandardError = true; 
      proc.StartInfo.RedirectStandardOutput = true; 
      proc.StartInfo.UseShellExecute = false; 
      proc.StartInfo.CreateNoWindow = true; 
      proc.Start(); 
      proc.WaitForExit(); 

我有一個運行一個DOS腳本調用wget命令,一切美好的一個窗口服務,但我需要使用批處理腳本創建和刪除臨時文件夾。

我的問題是,該服務映射,而不是

C:\\Program Files\\Netspot\\ControllerInterfaceService\\ 

這是一個測試工具中工作正常的路徑,

c:\windows\system32 

爲什麼該服務使用的system32文件夾下,而不是映射到本地文件夾

+0

臨時文件夾是否必須在'system32'內?使用'%temp%\ aruba-out'可能會工作.. – Blorgbeard 2012-01-31 11:07:45

+0

嘗試以管理員身份運行 – 2012-01-31 11:10:07

+0

臨時文件不需要在system32中,但由於某些原因,作爲服務運行時,它默認爲該文件夾而不是安裝文件夾 – 2012-01-31 11:50:00

回答

3

通過對窗口服務的默認當前目錄是System32中。

link可能是有益的:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

使用上面的代碼行到當前目錄設置爲相同的 目錄作爲您的Windows服務。

+0

謝謝添加這個做伎倆:) – 2012-02-06 10:50:31

1

除非你正在爲微軟工作的任何想法,不要創建在WINDOWS \ SYSTEM32文件夾中。

0

您的批處理腳本是否使用相對路徑或絕對路徑?

如果相對,則更改當前工作目錄。這可以通過ProcessStartInfo進行設置。請參閱MSDN信息:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

如果提供的用戶名和 密碼,必須先設置WorkingDirectory屬性。如果該屬性未設置,則默認 工作目錄爲%SYSTEMROOT%\ system32。

也可以考慮按照Blogbeard的建議寫入%temp%

(發表您的批處理腳本請)

相關問題