小编Col*_*n B的帖子

您如何等待任务计划程序任务在批处理文件或C#中完成?

我正在尝试编写一个执行两项操作的批处理文件:

  1. 首先,它启动安装程序(program.exe)的安装程序(install.exe).
  2. 其次,它启动已安装程序的一个实例(program.exe).必须在安装完成后执行此操作.

除了安装程序需要管理员权限并且必须在用户上下文中运行之外,这将是相对简单的.即使有这些限制,这仍然是相对简单的,除了我在Azure Worker Role上运行它,这意味着两件事:

  1. 必须从启动任务运行提升的批处理文件.
  2. Azure辅助角色中的启动任务没有用户上下文.

因此,解决方案似乎是在真实用户上下文中将安装程序作为任务计划程序任务运行.但是,这需要注意我需要在启动program.exe之前等待此任务完成.

因此,我的问题是:如何等待任务计划程序任务完成批处理文件?

或者,我可以在单个任务计划程序任务中以菊花链形式连接我的批处理文件中的两个调用(任务计划程序在单个任务中最多支持16个连续事件[需要引证]).

不过,如果我采取这种做法我的批处理文件将尽快任务终止计划,不只要它完成.不幸的是,我必须等到它才能完成我的工作者角色中的任何逻辑.但是,如果我可以检查任务计划程序任务是否已完成C#(没有管理员权限),那么我可以在那里等待它.

因此,第二个可行的答案是问题:如何检查任务计划程序任务是否已从C#完成?

编辑:我想我会通过MC ND澄清以下答案:

从高级别开始,此命令检查任务是否正在运行,然后它会休眠并循环(如果是).

:loop
for /f "tokens=2 delims=: " %%f in ('schtasks /query /tn yourTaskName /fo list ^| find "Status:"' ) do (
    if "%%f"=="Running" (
        ping -n 6 localhost >nul 2>nul
        goto loop
    )
)
Run Code Online (Sandbox Code Playgroud)

该调用schtasks /query /tn yourTaskName /fo list输出如下内容:

Folder: \  
HostName:      1234567890  
TaskName:      \yourTaskName  
Next Run Time: 11/27/2030 11:40:00 PM  
Status:        Ready  
Logon Mode:    Interactive/Background …
Run Code Online (Sandbox Code Playgroud)

c# windows batch-file scheduled-tasks azure

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

Windows 中内存映射文件的命名约定

我已经搜索了这个问题的答案,但不幸的是我没有找到任何关于它的信息!

本质上:Windows 中内存映射文件的有效名称集是什么?

  • 他们能坚持多久?
  • 什么是合法字符,例如正斜杠、连字符、标点符号等是否合法?
  • 字符顺序是否有限制,例如 mmf 名称不能以下划线开头?

编辑:我意识到这个问题的答案可能是“它们与 Windows 中的普通文件命名约定完全相同。” 然而,澄清这一点很重要。

windows memory-mapped-files

3
推荐指数
1
解决办法
1275
查看次数

我需要一个人物吗?它们适用于什么?

我已经开始使用matplotlib,我有点困惑为什么数字存在.有时我会看到声明图形的代码,然后绘制一个图表,有时我看到这样的事情:

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('initial.dat','float')
plt.plot(data[:,0], data[:,1])
plt.xlabel("x (Angstroms)")
plt.ylabel("V (eV)")
plt.savefig('v.png',bbox_inches='tight')
plt.clf()
Run Code Online (Sandbox Code Playgroud)

我阅读了关于图和情节的文档,但我没有得到它.为什么数字存在?

python matplotlib

3
推荐指数
1
解决办法
51
查看次数

在Windows中:如何在另一个用户上下文下以管理员模式以编程方式启动进程?

脚本

我有一台远程计算机,我想以编程方式运行安装程序(任意可执行文件).这些安装程序需要两件事:

  • 它们必须以管理员模式运行.
  • 它们必须在特定用户上下文下运行(具体而言,是Administrators组成员的本地用户).

事实证明这非常具有挑战性.

看起来好像有一些外部工具可以做到这一点,但我正在寻找Windows附带的解决方案.

这个问题的有效解决方案是什么样的

从提升的上下文(例如,提升的批处理文件或可执行程序),有效的解决方案应该能够以管理员模式在另一个用户上下文下以编程方式启动进程.假设其他用户的ID和密码可用,而另一个用户是Administrators组的成员.附加限制:

  • 有效的解决方案不能依赖外部工具.由于Windows的新版本默认使用.NET和PowerShell,因此这些是有用的工具.
  • 有效的解决方案不能要求用户交互.这意味着如果弹出UAC窗口,或者需要任何用户确认,则解决方案无效.

请在发布前测试您的解决方案以确保其有效!如果您要提供指向其他解决方案的链接,请在发布之前验证链接的解决方案是否有效.许多声称已经解决这个问题的人实际上没有.

我试过了什么

我尝试过使用Batch Scripts,PowerShell和C#.据我所知,这些技术都不能完成任务.它们都遭受同样的基本问题 - 以另一个用户身份运行任务并且在管理员模式下是相互排斥的进程.让我更具体一点:

为何不批量

用于在不同用户上下文下运行的命令是Runas,它不会启动提升的进程.有几种外部工具可以解决这个问题,但如前所述,这些工具是不允许的.

为什么不PowerShell

启动新进程Start-Process的命令可以提升新进程并以不同用户身份运行,但不能同时运行.我在这里提到了一个未解决的问题.不幸的是,没有人提供解决方案,这让我相信这是不可能的.

为什么不C#

这似乎也是不可能的,因为Process类似乎不支持在管理员模式下以及在不同用户的凭据下启动进程.

为什么不是外部工具?

这迫使我依赖别人的代码来做正确的事情,我宁愿自己编码而不是这样做.事实上,我有一个比依赖别人更好的解决方案,但是相当hackish:

  • 使用任务计划程序创建任务,以便在非常遥远的将来某个时间以指定帐户的管理员模式启动可执行文件.
  • 强制任务立即运行.
  • 等待任务完成.这里回答.

提前感谢任何试图帮助的人!非常感谢,我希望如果没有别的,其他人能够找到这个任务计划程序的工作.

windows batch-file

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