Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算在共享文件夹上运行的.exe的所有实例_C#_Executable_Tracking_Shared Directory - Fatal编程技术网

C# 计算在共享文件夹上运行的.exe的所有实例

C# 计算在共享文件夹上运行的.exe的所有实例,c#,executable,tracking,shared-directory,C#,Executable,Tracking,Shared Directory,我有一个c应用程序,它位于一个共享文件夹中,其中有3到4个人运行相同的.exe文件。我需要能够计算运行进程的所有实例 到目前为止,我已经尝试了互斥和: Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length; 如果我试图计算在我的机器上运行的.exe文件的实例数,那么这些方法是有效的,但这将在多台机器上运行,所有这些机器都指向同一个共享可执行文件 我不想创建一个根据用户是否打开或关闭而增减的文件,因为

我有一个c应用程序,它位于一个共享文件夹中,其中有3到4个人运行相同的.exe文件。我需要能够计算运行进程的所有实例

到目前为止,我已经尝试了互斥和:

Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length;
如果我试图计算在我的机器上运行的.exe文件的实例数,那么这些方法是有效的,但这将在多台机器上运行,所有这些机器都指向同一个共享可执行文件

我不想创建一个根据用户是否打开或关闭而增减的文件,因为这是不可靠的

----编辑-------

有人知道Excel是如何做到的吗?如果第二个人打开该文件,它会说该文件正在使用,并告诉您是谁在使用该文件
谢谢你的帮助

除了实施某种形式的授权服务,或者如果您对运行中的计算机拥有特权,没有其他方法。

一台计算机上的进程无法检测到另一台计算机上运行的进程,除非您在它们之间建立某种通信

你可以按照你的建议设置一个共享文件,但是它是不可靠的

您可以在某台中央计算机上运行服务,并且每个实例都必须向服务器报告,但当然,这也会有类似的可靠性问题。如果一个实例在没有通知服务器的情况下死亡,服务器将不会意识到它仍在运行

当每个实例运行时,它可以侦听一个端口,将其IP和端口号记录在一个中心文件中,当您需要计数时,您可以尝试连接到每个端口以确认该实例仍在运行


有很多方法可以做到这一点,但工作取决于你。当操作系统都在同一台机器上时,您无法从操作系统获得帮助。

您可以知道谁打开了共享:

打开“计算机管理”右键单击“我的计算机”,然后选择“管理” 然后从左侧的树状视图中选择:

系统工具>共享文件夹>会话

此列表列出了通过共享访问文件的用户

以编程方式进行此操作有一个很好的答案:

如果您真的想更进一步,并且您拥有管理员权限,您可以使用此信息来询问连接机器上正在运行的进程:

tasklist.exe /S SYSTEM /U USERNAME /P PASSWORD
我不是建议你做这些。。更多内容强调了所需的内容。我会在某个地方运行一台服务器,从你的应用程序收到打开、关闭和ping通知

ping通知将允许您识别已崩溃、失去连接或因任何其他原因未向服务器应用发送关闭通知的实例

我已经看到了这一点,只要在开放会话的DB中有一个表,它每分钟左右都会被写入。我不知道这将如何适用于数百万用户,但我已经看到它适用于数十个用户,甚至上百个用户

编辑:

更多关于ping

如果您有服务器端代码,您可以主动查找缺少的ping,但是我会尝试在读取打开的会话时只使用DB表并在select中添加where子句:

Select
    *
FROM
    Session
WHERE
    LastPing > DATEADD(second,-60,Now())
我会在insert上检查一条旧记录,这样就不会有很多旧的行挂起


编辑:如果你使用了本答案开头列出的疯狂技术,你将无法知道有人在本地将文件复制到他们的机器并运行它。如果你让程序坚持它与特定的数据库或服务器有连接,那么你就有了更多的控制权。

你能让程序在运行时在同一目录下创建一个文件吗。。类似于microsoft office锁定文件的东西?然后你可以看看有多少像这样的文件。对不起,我想你对这个选项的看法和一个带计数器的文件是一样的。。这是干什么用的?就像你在运行windows一样,你可以查看谁正在通过共享访问哪些文件:计算机管理>系统工具>共享文件夹>会话我担心的是电源断开,因为电源断开,所以不必删除文件或更新数据库,说进程不再运行db每隔60秒登录一次用户您知道任何超过60秒的记录都来自崩溃的appsExcel在其打开的文件所在的目录中创建一个临时文件。是的,我想我可以设置一个递增和递减的数据库。由于这只是一个小程序,可以帮助我的好友和其他需要查看数据库、管理工作资料的人,我可以设置一个按钮,让他们将计数重置为0。这很难看,但由于软件不是很大,它可以工作。是的,我可以肯定地研究一下。使用ping,您是否在服务器上设置了一些内容,显示“嘿,我一分钟内没有收到ping”。此应用程序已关闭。?添加了编辑。。在读取数据时,我会注意这一点。我将
一定要调查一下。谢谢你,伙计!我没有代表做任何事情,但我真的很感激。我会告诉你我发现了什么!我认为每个人都可以在投票后接受答案。。如果你觉得这是一个答案;哈哈哈。完成。不管我是否使用这种方法,你在其他评论中给了我足够的信息来解决这个问题。