小编gre*_*hat的帖子

从Python启动一个完全独立的过程

我正在尝试从python启动一个完全独立的进程.我不能使用像os.startfile这样简单的东西,因为我需要传递参数.目前我正在使用subprocess.popen,它让我90%的方式.

args = ["some_exe.exe", "some_arg", "another_arg"]
subprocess.Popen(args, creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

使用带有分离创建标志和std*管道的popen会启动一个新进程,该进程在父进程终止后继续存在.这一切都很好.问题是新的'子'进程仍然保留了父进程的幻象句柄.因此,如果我尝试卸载父exe(我的python脚本通过pyinstaller捆绑到exe),msiexec抱怨父exe仍在使用中.

因此,目标是生成一个完全独立的进程来运行"some_exe.exe",它没有任何句柄回原始进程.

注意:这适用于Windows XP及更高版本.我正在开发Win7.

python windows-installer popen

29
推荐指数
1
解决办法
1万
查看次数

表单构造时 get_FrameDimensionsList() 出现“参数无效”异常

我有一个带有 Windows 窗体的应用程序,有时会抛出“参数无效”异常。该异常是在构造时遍历自动生成的代码(由 Visual Studio 生成)时引发的。

这是一些相关的代码片段。

// MainForm.cs
public partial class MyForm : Form
{
  public MyForm(Action shutdown_request_callback = null)
  {
    Visible = false;
    ShowInTaskbar = false;
    Opacity = 0;

    InitializeComponent();
    ...
  }
}

// MainForm.designer.cs, this is auto-generated
partial class MainForm
{
  private void InitializeComponent()
  {
    ...
    this.StatusPane = new StatusPaneUserControl();
    ...
  }
}

// StatusPaneUserControl.cs
public partial class StatusPaneUserControl : UserControl
{
  public StatusPaneUserControl()
  {
    InitializeComponent();
  }
}

// StatusPaneUserConrol.designer.cs, auto generated code
partial class StatusPaneUserControl
{ …
Run Code Online (Sandbox Code Playgroud)

c# exception winforms

7
推荐指数
0
解决办法
2069
查看次数

Windows:如何将具有长路径的文件移动到回收站?

我正在使用Python,但我认为C#中存在同样的问题.

我希望能够支持扩展路径(len> 260的路径,表示为//?/ c:/ blah/blah).看起来将文件移动到回收站的标准方法是通过SHFileOperationW或SHFileOperation.

在python中,有用的xplatform库move2trash使用SHFileOperationW.关于C#的一些文章说使用相同的东西.

SHFileOperationW的问题在于它不支持扩展路径.这是SH工具的一般限制.

有没有人有任何处理回收站和扩展路径的技巧?

参考链接:C#版本,Python版本

c# python windows winapi recycle-bin

5
推荐指数
1
解决办法
707
查看次数

如何取消正在进行的Requests.Session.Get请求?

所以我有一个帮助线程,它使用https从服务器监听信息.我正在使用Python的Requests.Session并且没有超时调用get(),因为我们确实想等待一些响应.

但是,在关机时,我想很好地结束所有帮助程序线程.我不知道如何杀死线程阻塞的get请求.在*nix环境中关闭会话的底层套接字将最终抛出异常.这是一种方法来做到这一点; 关闭套接字,捕捉异常,快乐.在Windows上,这似乎不起作用.

什么是杀死/结束会话和获取请求的正确方法,以便我的帮助程序线程可以死?

澄清:我正在使用Python的Requests.Session.get().

python sockets python-requests

2
推荐指数
1
解决办法
2002
查看次数