c# - 如何取消共享共享打印机?

标签 c# windows printing share shared

我正在通过 C# 开发“共享监控应用程序”,它正在监控共享事件,我正在使用这些 API 来实现枚举共享项目/取消共享共享项目。

使用的API:

NetShareEnum
NetShareDel


NetShareEnum 枚举所有共享项,NetShareDel 删除共享项 (=unshare)。
我使用 SHChangeNotify 删除共享标记和工作正常的目录。
(使用NetShareDel删除共享项目不会立即受到影响。)

但是打印机状态不受 SHChangeNotify 的影响。这意味着在通过 NetShareDel 删除共享打印机并使用 SHCNE_NETUNSHARESHCNF_PATHW 调用 SHChangeNotify 之后。我也使用了 SHCNE_NETUNSHARESHCNF_PRINTERW,但没有任何反应。

共享打印机的状态标记: http://i.stack.imgur.com/1ZGrI.png
在此图片中,您可以看到勾选圆圈右侧的用户,表示共享打印机。
但是在调用NetShareDel取消共享打印机成功后,共享标记消失了。

有人知道如何实现吗?我在等你的帮助。 :D
抱歉我的英语不好。

最佳答案

您是否尝试过通过 WMI? 我自己没有用它来“取消共享”打印机,但我在应用程序中经常使用它以其他方式编辑打印机和打印机端口。 我认为这样的事情应该可以解决问题。

Win32_Printer 类看起来有一个“共享”属性,因此我建议尝试将其切换为 false。 https://msdn.microsoft.com/en-us/library/aa394363%28v=vs.85%29.aspx

我没有使用取消共享测试这段代码,但它与我用来更改其他属性的代码完全相同。

//get the printer(s) through wmi query
//prep query
SelectQuery query = new SelectQuery(string.Format("select * from Win32_Printer WHERE Name = '{0}'", "printername"));
//create scope (connect to server)
ManagementScope scope = new ManagementScope("\\\\serverName\\root\\cimv2");
//search for printers
ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);
//get collection of printers (should be 0 or 1, but it returns a collection regardless because of the query
ManagementObjectCollection printers = search.Get();
//iterate through the 0-1 printers and set Shared to false
foreach (ManagementObject printer in printers)
{
    printer.SetPropertyValue("Shared",false);
    printer.put();
}

关于c# - 如何取消共享共享打印机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293633/

相关文章:

c# - static int Main返回值给谁?

PHP Symfony - 连接已重置 (Windows)

css - 打印 iFrame 时出现问题

python - 如何打印井号和变量

c# - 程序运行三次,得到三种不同的结果

c# - Reactive Extensions - 在不使用 Subject 的情况下将来自 IObservable<byte[]> 的流反序列化为单独的分隔消息

c++ - 在 C++ 中绘制 Windows 10 壁纸

python - 删除已经用 Python 打印的

c# - 如何获取数据列表中选定的单选按钮文本?

c - Win32和窗口样式