0

クライアント マシンに Windows フォーム アプリケーションがあります。telnet 経由でログインし、シャットダウンし、いくつかのファイルを更新して、再起動しようとしています。

クライアント マシンで cmd を使用し、MyApp.exe と入力すると、うまく起動します。しかし、telnet ウィンドウでこれを行うと、奇妙なことが起こります。アプリケーションは現在プロセス リストにある限り開始されますが、そのフォームは開かれず、log4net ロギングも行われません。

何が起こっているのですか?どうすれば修正できますか?

編集: これは、すべてのフォーム ベースの Windows アプリに当てはまるようです。自分で試してみてください: telnet localhost => メモ帳。UI ではなく、ユーザー インターフェイスにポップアップ表示されます。

また、これらすべてのマシンにRAdminをインストールしていますか? 私が見たところ、存在しない自動化機能がありましたが、私を助けることができる何かがあるのでしょうか?

4

5 に答える 5

1

Windows XP では、Windows タスク スケジューラを使用してこの制限を回避する方法を見つけました。Windows 7 の場合、telnet はデフォルトではインストールされません。

最初に、次のレジストリ設定をマージして、ネットワーク アクセス: ローカル アカウントの共有とセキュリティ モデルを "クラシック - ローカル ユーザーが自分自身として認証する" に変更する必要がありました。

Windows レジストリ エディター バージョン 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "forceguest"=dword:00000000

リモート FTP サーバー上のファイルに配置し、FTP コマンドを使用して取得しました。

regedit /s file.reg とマージします

次に、一度実行するタスクを作成しました: SchTasks /Create /SC ONCE /RU "user" /RP pass /TN "StartApp" /TR "\"C:\Windows\NotePad.exe\"" /ST 00:00: 00

スケジュールを手動で開始しました: Schtasks /run /tn "StartApp"

スケジュールを削除しました: schtasks /delete /F /tn "StartAPP"

そして、それはうまくいきました。クレイジーですね!なんて痛い!

于 2015-02-20T21:43:43.180 に答える
1

編集:私の最初の回答では、あなたの質問を誤解していました。マシンを再起動したと言ったと思いました。

そうは言っても、私はおそらく別のアプローチをとろうとします。ある種の自動更新サービスを MyApp.exe に設定できますか。簡単な方法は、MyApp.exe が新しいバージョンが利用可能になったときにポーリングできる Web サービスをセットアップすることです。次に、更新作業を行うためにアップデータ アプリケーションを起動する必要があります。

于 2009-06-10T20:54:30.320 に答える
1

何が起こっているのかというと、アプリがプライベート デスクトップで起動し、telnet セッションを閉じるとすぐに終了していると思います。「現在/アクティブな」デスクトップ ウィンドウで起動する方法はわかりませんが、telnet からログアウトした後も実行し続けるには、「start」コマンドで実行してみてください。

于 2009-06-10T21:26:19.523 に答える
1

telnet を使用する代わりに、VNCRobotを使用してみてください。VNCRobot はユーザーとして実行され、同じデスクトップを共有する必要があると思います。

免責事項: 私は VNCRobot を使用したことがありません。言及する価値があると思っただけです。

于 2009-06-10T21:33:52.783 に答える
0

これらのマシンで PowerShell を実行できる場合は、それを使用して実行中のプロセスを見つけて強制終了できます。..

Get-Process

..コマンドレットは実行中のプロセスを表示します。このリストを介して foreach にロジックを記述し、powershell で直接アプリケーションを正規表現と一致させることができます。Ruby はわかりませんが、理論的には、それを使用して powershell コマンドを呼び出して同じことを行うことができます。と:

powershell.exe -command Get-Process

プロセスを強制終了するには:

Stop-Process <processId>
Stop-Process -processname <processName>

telnet を介して GUI プロセスを開始する方法がよくわかりません。私の機器には telnet が設定されていません。

おそらく、次のようなことができます: http://www.peterprovost.org/blog/post/Powershell-Sudo-(sort-of)-for-Vista-UAC.aspx

そのアドレスの例のように動詞を「runas」に設定すると、UAC が呼び出されます。これを行うと、新しいプロセスを強制終了できませんでしたが、設定した場合は強制終了します。

$psi.Verb = "open"

さらに、次の属性も設定できます。

Verb                    : open
Arguments               :
CreateNoWindow          : False
EnvironmentVariables    : {processor_revision, processor_level, logonserver, systemroot...}
RedirectStandardInput   : False
RedirectStandardOutput  : False
RedirectStandardError   : False
StandardErrorEncoding   :
StandardOutputEncoding  :
UseShellExecute         : True
Verbs                   : {open, runas, runasuser}
UserName                :
Password                :
Domain                  :
LoadUserProfile         : False
FileName                : notepad.exe
WorkingDirectory        :
ErrorDialog             : False
ErrorDialogParentHandle : 0
WindowStyle             : Normal
于 2009-06-10T22:12:24.017 に答える