我正在尝试编写一个执行两项操作的批处理文件:
除了安装程序需要管理员权限并且必须在用户上下文中运行之外,这将是相对简单的.即使有这些限制,这仍然是相对简单的,除了我在Azure Worker Role上运行它,这意味着两件事:
因此,解决方案似乎是在真实用户上下文中将安装程序作为任务计划程序任务运行.但是,这需要注意我需要在启动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) 我已经搜索了这个问题的答案,但不幸的是我没有找到任何关于它的信息!
本质上:Windows 中内存映射文件的有效名称集是什么?
编辑:我意识到这个问题的答案可能是“它们与 Windows 中的普通文件命名约定完全相同。” 然而,澄清这一点很重要。
我已经开始使用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)
我阅读了关于图和情节的文档,但我没有得到它.为什么数字存在?
脚本
我有一台远程计算机,我想以编程方式运行安装程序(任意可执行文件).这些安装程序需要两件事:
事实证明这非常具有挑战性.
看起来好像有一些外部工具可以做到这一点,但我正在寻找Windows附带的解决方案.
这个问题的有效解决方案是什么样的
从提升的上下文(例如,提升的批处理文件或可执行程序),有效的解决方案应该能够以管理员模式在另一个用户上下文下以编程方式启动进程.假设其他用户的ID和密码可用,而另一个用户是Administrators组的成员.附加限制:
请在发布前测试您的解决方案以确保其有效!如果您要提供指向其他解决方案的链接,请在发布之前验证链接的解决方案是否有效.许多声称已经解决这个问题的人实际上没有.
我试过了什么
我尝试过使用Batch Scripts,PowerShell和C#.据我所知,这些技术都不能完成任务.它们都遭受同样的基本问题 - 以另一个用户身份运行任务并且在管理员模式下是相互排斥的进程.让我更具体一点:
为何不批量
用于在不同用户上下文下运行的命令是Runas,它不会启动提升的进程.有几种外部工具可以解决这个问题,但如前所述,这些工具是不允许的.
为什么不PowerShell
启动新进程Start-Process的命令可以提升新进程并以不同用户身份运行,但不能同时运行.我在这里提到了一个未解决的问题.不幸的是,没有人提供解决方案,这让我相信这是不可能的.
为什么不C#
这似乎也是不可能的,因为Process类似乎不支持在管理员模式下以及在不同用户的凭据下启动进程.
为什么不是外部工具?
这迫使我依赖别人的代码来做正确的事情,我宁愿自己编码而不是这样做.事实上,我有一个比依赖别人更好的解决方案,但是相当hackish:
提前感谢任何试图帮助的人!非常感谢,我希望如果没有别的,其他人能够找到这个任务计划程序的工作.