2016-10-13 47 views
0

沒有結果使用下面的代碼,我可以找到並刪除打印隊列「Win32_Printer去哪兒網= TRUE」返回Visual Studio安裝項目

Dim scope = New ManagementScope(ManagementPath.DefaultPath) 
scope.Connect() 
Dim printers = New ManagementObjectSearcher(scope, New SelectQuery("Select * from Win32_Printer Where Network = TRUE")).[Get]() 
MsgBox("Print count: " & printers.Count) 
For Each printer As ManagementObject In printers 
    Dim nameOfPrinter = printer("Name").ToString() 

    If nameOfPrinter.Contains("BROTHER") OrElse nameOfPrinter.Contains("HP") Then 
     printer.Delete() 
    End If 
Next 

然而,當我移動代碼installer.vb(這是添加到安裝程序項目作爲主輸出(有源)),則返回0 printers.count

更新:如果刪除其中的原因,我可以得到本地打印隊列

<Security.Permissions.SecurityPermission(Security.Permissions.SecurityAction.Demand)> _ 
    Public Overrides Sub Commit(ByVal savedState As _ 
    System.Collections.IDictionary) 
Dim scope = New ManagementScope(ManagementPath.DefaultPath) 
    scope.Connect() 
    Dim printers = New ManagementObjectSearcher(scope, New SelectQuery("Select * from Win32_Printer Where Network = TRUE")).[Get]() 
    MsgBox("Print count: " & printers.Count) 
    For Each printer As ManagementObject In printers 
     Dim nameOfPrinter = printer("Name").ToString() 

     If nameOfPrinter.Contains("BROTHER") OrElse nameOfPrinter.Contains("HP") Then 
      printer.Delete() 
     End If 
    Next 

有什麼我錯過了補充?請指教,謝謝。

回答

0

最可能的解釋是網絡資源打印機(以及映射的驅動器號等其他網絡項目)是特定於用戶上下文的。在爲每個人運行的Visual Studio設置中,自定義操作使用本地系統帳戶(它們需要升級)運行,所以它不會找到它們。您問的是系統帳戶是否有任何網絡打印機(並且系統帳戶無論如何都沒有網絡訪問)。它發現本地打印機是硬連線的,因爲它們可供所有用戶使用。

在Visual Studio設置中並沒有真正的繞道。通常,應用程序首次運行時運行的配置程序可以最好地實現您所做的事情。我不清楚爲什麼要在安裝過程中刪除打印隊列,但是如果這可能需要多次完成,那麼用戶可以稍後重新運行該程序,並且如果該類型的打印機是在安裝之後安裝的東西可能需要重新配置。