问题标签 [win32-process]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
683 浏览

c - 使用 CreateProcess 启动子程序时,不会在父程序的工作目录中搜索 DLL

我有一个非常奇怪的问题。我正在Windows下开发一个将数据写入临时目录的 C 程序。它使用GetTempFileName生成唯一名称。数据实际上是我在将数据写入临时文件后使用CreateProcess启动的exe 。对于参数,我使用so 使用父程序的当前工作目录成为子程序的工作目录。有所有需要的 DLL。lpCurrentDirectoryNULL

在大多数计算机(XP、2003、7、8)上,一切都按预期工作。但是在一个特定的Windows 7上,当子程序启动时,我得到了异常。很奇怪,但如果我将所有需要的 DLL 移动到 temp 目录,一切都会按预期工作。

嗯,为什么没有在父程序的工作目录中搜索 DLL?

非常感谢。

0 投票
2 回答
164 浏览

visual-studio - 无法在干净的系统中启动内置于 VS2008 的可执行文件

我最近遇到了这个问题。我在 Visual Studio 2008 中有一个简单的基于控制台的项目,我在发布模式下构建并发布了它。

我们发现在干净的 windows xp sp3 机器上,双击可执行文件并没有启动,并抛出一个错误,提示“配置不正确”。我们通过在系统上安装 VS2008 可再发行包解决了这个问题。我的问题是:

1- 为什么会这样?它并没有发生在所有 xp 机器上,但其中一些机器上发生了。令人难以置信的是,在 windows xp sp3 中默认情况下不存在运行简单 win32 程序所需的文件。那么notepad.exe和其他程序在哪里运行呢?我考虑的一种可能性可能是操作系统中存在的运行时文件较旧,而 exe 清单指的是较新版本的文件。但我想知道是否是这种情况,因为 VS 2008 本身已经很老了。让我知道你的想法。

2-由于我必须在很多机器上运行 exe,我正在考虑一种方法,通过 VS 2008 中的 win32 程序静态链接所有需要的库。我知道链接器选项中的 /MT 开关,但是想知道它是否会处理所有运行时库(C++ 库和其他 Windows 库)。

谢谢。

0 投票
0 回答
897 浏览

winapi - 如何在 ReadFile 中包含超时

当 szFullCommand 的结果使用 WaitForSingleObject 返回过多数据时,我重做了一些挂起的代码。现在我将所有数据放入返回的字节中,但是如何告诉“ReadFile”停止?输出末尾的唯一标记是 CR/LF 对,但这些都在返回的数据中,所以我无法真正注意。有任何想法吗?

0 投票
1 回答
2230 浏览

windows - 在 Windows 上获取 64 位进程的 TEB

我正在尝试在 Windows 8 中获取 64 个远程线程的 TEB。

按照这里的定义,我这样做:

如果我为 32 位编译,sz 为 0x1C,调用成功返回。如果我为 64 位编译,sz 为 0x2C,但调用返回状态 0xC0000004:STATUS_INFO_LENGTH_MISMATCH。

知道 64 位目标上 _THREAD_BASIC_INFORMATION 的正确大小是多少?或者也许是获得远程TEB的另一种方式?

谢谢,亚历克斯

0 投票
1 回答
1408 浏览

c++ - 如何初始化句柄

错误:

说明代码:

问题:好的,我收到错误 TextLabelVar is正在使用而没有初始化。对于 var Disps,我遇到了类似的错误。然后我宣布 char Disps[100]; 这显示没有错误。现在,错误转移到句柄上。我不确定我是否可以将句柄声明为数组,这是否有意义。我该如何解决这个问题?

0 投票
2 回答
3609 浏览

c# - win32_process.create 不显示窗口


我正在尝试使用 C# 在远程机器上创建一个进程。

我得到了所有需要的参数,并且我实际上成功地运行了该过程,但是我看不到窗口。
例如,这里我正在尝试运行记事本进程,但没有显示任何窗口,只有任务管理器中的 notepad.exe 进程。

我的猜测是我发送的 ProcessStartupInformation 参数错误,但我仍然无法弄清楚问题出在哪里。
任何帮助,将不胜感激。
非常感谢,亚历克斯。

0 投票
1 回答
1337 浏览

c++ - 'atltime.h 错误 32 位编译与 64 位编译

我有一个 32 位 VC++ 应用程序,我已将其重新编译为 64 位应用程序,因为我想在 64 位操作系统上使用它。
代码方面不需要更改,因为它兼容 32 位和 64 位。
因此,在(移植)64 位编译时,我只做了 3 处更改。

1)在VS2008(顶部的下拉菜单)中,我从“Win32”更改为“x64”。
2)在配置管理器中,我确保我正在编译的项目更改为“x64”。
3)在项目属性-->链接器->高级选项->机器类型::将值改为MACHINEx64。

现在在给出背景之后,当我在32位模式下编译项目时遇到实际问题,它编译成功。但是,当我通过执行上述更改将项目编译为 x64 时,会出现以下错误。

我该如何解决这个问题?我错过了任何图书馆吗?但我对链接器使用了与“32 位模式”相同的设置。即指向同一组 *.lib 文件。(因为所有的库都是静态链接的,所以这个应用程序只生成一个 EXE)。

PS:需要注意的是我系统中的VS安装在C:\ProgramFiles(x86)而不是C:\ProgramFiles。所以我看到“atltime.h”头文件在

“C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include”

这可能是在以 64 位模式构建代码时无法识别此头文件 atltime.h 的任何原因吗?

提前致谢。

0 投票
2 回答
110 浏览

python - 理解为什么多线程无法读取全局变量

在脚本上部焦点中定义了这个全局变量

t0 = time.time() ##是全局的

和这个功能

def timestamp(t0):
... return ("[" + str(time.time()-t0)+ "] ") ## 从初始开始的时间戳

我正在尝试为脚本的每个 print() 加上时间戳

打印(时间戳(t0)+“”......随便......“”)

这有效,但是当我进入多线程时

对于范围内的 thread_id(win32-safe_os):
... p = Process(target=fonction,args=((thread_id),“test”))
... p.start()
... thread_list.append(p)

为了

def fonction(thread_id,filetodo):
... print(timestamp(t0)+"加载核心"+str(thread_id))
... print(timestamp(t0)+str(filetodo)+"在核心上"+str( thread_id))
... print(timestamp(t0)+"空闲内核"+str(thread_id))

我得到这个标准输出:

[2.70299983025] 297 jpg / 36087 个文件
[2.75] 进入多线程
[2.75] Win32 发现:2 个内核
[0.0] 加载内核 0
[0.0] 对内核 0 进行测试
[0.0] 空闲内核 0
[0.0] 加载内核 1
[ 0.0] 在核心 1 上测试
[0.0] 空闲核心 1

我可以看到我对 timestamp() 和 t0 的调用正在工作,但在 p.start() 中没有。我想知道如何(以及为什么)我需要纠正?

PS:我尝试使用 time.clock,但在 win32 中它指的是线程的开头(不是脚本)/

0 投票
0 回答
544 浏览

java - 在 64 位服务器 2088 上执行 Runtime.getRuntime().exec() 时出现 java.io.IOException

执行此代码时出现错误:

错误是:

它在 Winserver 2003 上正常运行。

0 投票
1 回答
134 浏览

winapi - win7上的远程UI脚本处于注销状态

我正在使用 psexec 运行一个远程脚本,该脚本对远程系统中存在的打印对象执行一些 UI 操作。具体来说,使用的 API 是 SHInvokePrinterCommand() 来调用打印机对象的打印机属性。

当用户在 Windows 7 上登录(因此可见桌面)执行时,整个事情工作正常。但是当没有用户登录时,该过程无法工作,API(SHInvokePrinterCommand)成功返回但它没有似乎做任何工作。WINDOWS XP 在类似条件下,WORKS FINE。

该观察使我相信它与这些操作系统中不同的会话和“窗口站”架构有关。通过远程进程中的一些编码,我能够确定远程进程是由 psexec 在非零会话(会话 2)中启动的,并且它所连接的唯一窗口站是“WinSta0”。(我使用了 EnumWindowStations( ) 为了那个原因)。WinSta0 是唯一接收来自键盘、鼠标等输入的 Windows 站。

有了这么多的观察,我不明白是什么让整个事情在 Windows 7 的情况下不起作用,没有登录。基本上打印机的属性页面在这种情况下实际上没有被调用。用于执行远程进程的 psexec 形成的会话是否以某种方式不是“完整”会话?有什么办法可以解决这个问题?

任何想法或建议都非常受欢迎。