我想使用MSVC 11.0编译一个升压1.57.0的程序,我得到以下错误: z:\d\dev\boost_1_57_0\boost\exception\exception.hpp(171) : error C4265: 'boost::exception_detail::error_info_container' but destructor is not virtual instances of this class may not be destructed correctly 有什么我可以做的吗? 这些post似乎没有提供解决scheme http://boost.2283326.n4.nabble.com/boost-exception-detail-error-info-base-does-not-have-virtual-destructor-td3384903.html http://boost.2283326.n4.nabble.com/Re-exception-warning-about-non-virtual-destructor-resolution-td4554753.html
我有一个应用程序运行,并不断在系统托盘图标。 它通过运行一些使用@Global互斥体的代码来确保它是我的应用程序的唯一运行实例。 由于第三方供应商的限制,我可以与供应商应用程序的一部分集成的唯一(理智的)方式是通过在configuration文件中指定任意命令行可执行文件被调用。 我关心的参数会自动添加到我指定的可执行文件中。 所以我认为大多数与此集成的人运行一个独立的程序,它连接到主程序的服务器套接字并发送一个让主程序知道命令行被触发的包。 我想知道是否有办法我可以做这个伪代码.. static void Main(string[] args) { if (isrunningcommandLine) { ConnectToAlreadyRunningProcessAndPassInfo(args); // find already running process by its process name and somehow pass the command line params KillProgram(); } else { CheckGlobalMutexAndStart(); } } 本质上,如果我通过命令行运行连接到已经运行的全局进程并传递一些数据。 我控制的代码将是客户端以及服务器,他们实际上是同一个项目。
我有一个build立在C#中的ClickOnce应用程序。 如您所知,按devise,ClickOnce应用程序无法以pipe理权限运行。 但是,如果需要执行需要提升特权的函数,则可以将另一个任意EXE与ClickOnce应用程序一起打包,并根据需要将应用程序调用到单独的EXE。 麻烦的是,当你每次调用单独的应用程序时,都会触发UAC提示,询问用户是否真的想用提升的特权运行。 这个特定的应用程序是在一个非常封闭的环境中,我可以确保我总是希望提升权限部分运行。 但是,当提供给普通用户时,有时UAC提示可能会显得令人恐惧。 所以为了缓解这个问题,我build立了一个EXE,它只会触发一次,然后继续在后台运行并监听WinEvents 。 然后我的主进程根据需要触发各种WinEvent,我把它放在AIA_START( 0xA000 )和AIA_END( 0xAFFF )之间,因为这些是社区保留事件。 还在我这儿? 到目前为止,我所描述的已经很完美了。 但是,它仍然需要用户在每次启动应用程序时都按一次“是”进入UAC提示。 我意识到我可以做得更好。 通过创build一个启动辅助EXE的Windows Scheduled Task,我只需要在UAC提示符上单击Yes,即可安装。 之后,我可以简单地触发计划任务,然后以提升的权限启动EXE。 这似乎也在工作。 我可以validation我的EXE是否具有pipe理权限启动,而且我已经有效地绕过了UAC提示,这很好。 然而 ,现在我从一个Scheduled Task启动EXE而不是直接启动EXE,看起来它不再是监听我在ClickOnce应用程序中触发的WinEvents。 或者,如果它正在倾听(我认为是这样),那么有一些东西阻碍了沟通。 我不太确定什么是阻碍的东西,因为看起来这两个进程仍在Windows下的同一用户帐户下运行。 有谁知道为什么我的辅助进程似乎不再响应WinEvents时,通过计划任务启动? 我该如何解决这个问题? 我意识到我可以使用不同的通信线路(在TCP端口上侦听,在共享文件上连续轮询等),但是因为我已经写了用于发送和侦听WinEvents的代码,所以我更愿意继续使用那。 如果您好奇,下面是我用来侦听WinEvents的代码的简要概述: public delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime); [DllImport("user32.dll")] private static extern IntPtr SetWinEventHook(uint […]
我启动位于文件夹myFolder中的app1.exe。 这个app1.exe通过C#中的Process.Start调用另一个app2.exe。 我closures了app1.exe。 app2.exe尝试删除myFolder,但它说它被locking,因为app2.exe正在使用它,即使app2.exe没有对myFolder做任何事情。 注意:如果我单独启动app2.exe(通过单击.exe),我可以删除myFolder。 它只能防止从app1.exe启动app2.exe。 有没有办法让一个单独的进程删除其调用者文件夹? app1.exe和app2.exe都在C#中。
我在Windows 7上使用Cygwin(尽pipe同样的问题可能也适用于本机Linux环境)。 一个父进程 – 碰巧是一个Ruby程序,但是我猜如果这是一个纯粹的C应用程序,就会发生同样的问题 – 使用system()来执行一个外部的(可能是长时间运行的)命令。 当这个外部程序正在运行时,父进程被终止。 孩子的过程还活着。 我能做些什么来确保subprocess也被杀死? 这里介绍一个“沙箱”场景来解释问题:在一个terminal窗口中,我执行以下命令: ruby -e 'puts $$; system("sh")' # Could also be a C program 显然,在打印进程ID之后,这个命令永远挂在sh命令上。 现在我尝试从不同的terminal窗口 kill -INT … 杀死Ruby进程。 使用procps或ps,我可以validation这个过程还活着。 现在我用 kill -TERM …. 不过,这个过程并没有被杀死。 最后我做了一个 kill -KILL …. 当然,这是做这个工作的。 Ruby进程被终止,但subprocess('sh')仍然活着。 我知道这是预期的行为,但什么是简单可靠的解决方法? 我试图build立一个会话,并在执行system之前调用Process.setsid ,但我得到错误消息 `setsid':不允许操作(Errno :: EPERM) 也许setsid在Cygwin上不可用,这对我来说不会感到意外,因为Windows进程的处理是非常不同的。 任何其他的想法,我可以尝试什么? 顺便说一下,代码应该最终移植到Linux上,所以如果可能的话,我想使用一个在Cygwin和Linux下运行的解决scheme。
我使用示例代码从特定列表中search我的Windows窗体应用程序的进程 void processStartEvent_EventArrived(object sender, EventArrivedEventArgs e) { string processName = e.NewEvent.Properties["ProcessName"].Value.ToString(); int processID = Convert.ToInt32(e.NewEvent.Properties["ProcessID"].Value); if (_processNames.Contains(processName)) { Process proc = Process.GetProcessById(processID); if (GlobalVar.SourceWinForm.InvokeRequired) { GlobalVar.SourceWinForm.Invoke(new MethodInvoker(delegate { ProcessHandler.SetParent(proc.MainWindowHandle, GlobalVar.SourceWinForm.Handle); })); } else { ProcessHandler.SetParent(proc.MainWindowHandle, GlobalVar.SourceWinForm.Handle); } } } 正如你可以看到我使用的function: [DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hwc, IntPtr hwp); 除了一件事情,一切都很好。 例如我寻找记事本应用程序到我的应用程序。 所以它真的给我的记事本到我的应用程序窗口,但问题开始,当我按下例如在记事本“格式 – >字体”它打开记事本,这个子窗口的新子窗口,我apllication不是这个子的父亲窗口。 我怎么可以追捕整个过程? […]
我正在通过Netbeans(使用Windows 7)使用C语言的stream程和线程。 我正在使用命令行参数,但是当它运行程序时,它不会工作。 如果我使用运行Netbeansbutton,它不会要求我需要input的参数,并将显示消息: / cygdrive / C / Program Files / Netbeans 8.1 / ide / bin / nativeexecution / dorun.sh:第33行:3592分段错误(core dump)sh“$ {SHFILE}” 我试图使用CMD控制台,但似乎我做错了这样调用函数: gcc ej1.c 2 我应该使用这种格式: gcc font_file.c -o exe_file.exe 但据我所知Netbeans文件夹中没有.exe文件。 这是我通过Windows cmd运行时得到的消息。 这里是代码: #include <stdio.h> #include <stdlib.h> #include <windows.h> int main(int argc, char *argv[]) { HANDLE hThread2; DWORD IDThread2; int n […]
我想要做的是一个程序,知道它是否在Windows上处于活动状态,以便在Java使用它。 我看了一下互联网,发现了两个不同的解决scheme: 选项1 选项2 但这并不是我所期望的。 根据选项1,我想要一个方法来引用该进程(并检测它是否处于活动状态/正在运行),但不search完整的tasklist ,然后在其上search。 我正在search是否有一个直接的方法来做到这一点。 我也尽pipe添加一个filter的任务列表,但无法find任何filter,只得到我正在寻找的过程。 我看到所有的选项使用tasklist /? 在我的命令行。 然后我search了关于第二个选项和wmic (我以前从未听过)的信息,看起来wmic允许你在命令行上执行任务(如果我错了,请纠正我)。 所以,在这里我有两个问题 : 有没有一个直接的方法来知道一个进程是否在Windows上与Java激活? 试图避免在完整的任务列表中search或使用wmic 。 如果不可能,如果我们谈论高效的编程,上面提到的两个选项中的哪一个会更好? 提前致谢!
我在使用PyCharm工作在Django项目上的64位Windows机器上。 Django 1.8.7,Python 2.7.9,MySQL 5.6。 我想尝试django_mysql ,但我得到: Unhandled exception in thread started by <_pydev_bundle.pydev_monkey._NewThreadStartupWithTrace instance at 0x03F8AE90> Traceback (most recent call last): File "C:\Program Files (x86)\JetBrains\PyCharm 2016.1\helpers\pydev\_pydev_bundle\pydev_monkey.py", line 551, in __call__ return self.original_func(*self.args, **self.kwargs) File "C:\Users\Admin\test\lib\site-packages\django\utils\autoreload.py", line 229, in wrapper fn(*args, **kwargs) File "C:\Users\Admin\test\lib\site-packages\django\core\management\commands\runserver.py", line 107, in inner_run autoreload.raise_last_exception() File "C:\Users\Admin\test\lib\site-packages\django\utils\autoreload.py", line 252, in raise_last_exception […]
我正在使用Windows 10.这是我的代码映射networking驱动器。 System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.UseShellExecute = true; p.StartInfo.Verb = "runas"; p.StartInfo.FileName = "net.exe"; p.StartInfo.Arguments = "use Z: " + dPath; //dPath has escaped characters p.Start(); 我试图做的是试图运行命令net.exe use Z: DPATH作为pipe理员,但Z驱动器没有出现在文件资源pipe理器,但是当我运行完全相同的命令使用cmd与pipe理员权限,Z驱动器显示正确。 映射驱动器的certificate 我的networking驱动器映射如下(在尝试手动重新映射时遇到此错误),只是它没有出现在“文件资源pipe理器”>“此PC”的“networking位置”下。