Skip to content

Windows11のタスクスケジューラで「ユーザーがログオンしているかどうかにかかわらず実行する」について #196

Closed

Description

@sakuramocchi

#191 ACCESS VIOLATIONが必ず発生するで、タスクスケジューラで実行できないと投稿しました。
その後、状況に変化がありましたので、別Issueで投稿させていただきます。

どちらもポータブル版のTeratermです。

teratemコマンドは、以下の通り。
ttpmacro.exe /V test.ttl

test.ttlの中で、connectコマンドは以下の通り。
connect host:22 /I /ssh /user=hoge /authkey=key

タスクスケジューラの設定は以下の通り
「ユーザーがログオンしているかどうかにかかわらず実行する」にチェック
「最上位の特権で実行する」にチェック
「表示しない」にチェック
構成は、「Windows Vista,Windows Server2008」

Teraterm4.108 サインイン、サインアウトどちらの状態でも実行可能
Teraterm5.2  サインイン、サインアウトどちらの状態でも実行不可

5.2は、TeraTerm Macro Interpreterが起動後、先に進んでいないようでした。

まずは、ご連絡まで。

Activity

  1. zmatsuo commented on Apr 11, 2024

    @zmatsuo
    Member

    連絡ありがとうございます。

    テストしようとしたのですがうまくいきませんでした。
    タスクスケジューラを使ったことがなかったので
    何か間違っていると思うのですがわからなかったです。

    詳しい方のコメントをお待ちしております。

  2. sempreff commented on Apr 22, 2024

    @sempreff
    Contributor

    5.x は タスクスケジューラから実行すると ttmacro の最初の GetMessage で詰まってしまうようです。
    (そこから先をどう調べたらよいものか、手詰まりです)

  3. zmatsuo commented on Apr 30, 2024

    @zmatsuo
    Member

    Tera Term 4 と 5 で動作が違うんですね。
    確かにどう調べればよいか…

    OutputDebugPrintf() (使えるのだろうか…)を細かく仕込んでいくような調査方法しか思いつかないです。

  4. sempreff commented on Dec 3, 2024

    @sempreff
    Contributor

    「ttmacto の最初の GetMessage でずっと待ち続ける状態になるが、20時間程度放っておくと何かメッセージを受け取って動き出す」
    という挙動が確認できています。そのメッセージに相当するような何かを送り付けてやれば解決できるのではないか、と考えていますが、具体的な方法がわからずにいます。
    他にどんな調査方法・仮説・対処方法が考えられるでしょうか。

  5. hkanou commented on Dec 16, 2024

    @hkanou
    Member

    WinMainの直後にSleepを追加し、Sleepしている間にプロセスにアタッチするとデバッガで処理を追えました。

    --- a/teraterm/ttpmacro/ttmacro.cpp
    +++ b/teraterm/ttpmacro/ttmacro.cpp
    @@ -128,6 +128,7 @@ static BOOL OnIdle(LONG lCount)
     int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
                        LPSTR lpszCmdLine, int nCmdShow)
     {
    +	Sleep(30000); // ★30秒待つ
     	hInst = hInstance;
     	LONG lCount = 0;
     	DWORD SleepTick = 1;
    

    タスクスケジューラの設定 「タスクの実行時に使うユーザアカウント」 で System、Local Service、Network Service等を指定すると SetupFNameW が下記のようになり TERATERM.INI の参照ができませんが、ポータブル版は問題ありません。

    System :
     %SystemRoot%\system32\config\systemprofile\AppData\Roaming\teraterm5\TERATERM.INI
    Local Service :
     %SystemRoot%\ServiceProfiles\LocalService\AppData\Roaming\teraterm5\TERATERM.INI
    Network Service :
     %SystemRoot%\ServiceProfiles\NetworkService\AppData\Roaming\teraterm5\TERATERM.INI

    Teraterm5.4は「ユーザーがログオンしているときのみ実行する」をチェックした場合は実行可能、
    「ユーザーがログオンしているかどうかにかかわらず実行する」をチェックすると実行不可でした。

    「ユーザーがログオンしているかどうかにかかわらず実行する」をチェックすると CCtrlWindow からメッセージが送信されていないように見えましたが、原因は見つけられていません。

  6. zmatsuo commented on Jan 24, 2025

    @zmatsuo
    Member

    「ユーザーがログオンしているかどうかにかかわらず実行する」をチェックすると CCtrlWindow からメッセージが送信されていないように見えましたが、原因は見つけられていません。

    ユーザーがログオンしているかどうかにかかわらず実行する=ON のとき、
    GUIアプリは使えないとか見かけました。
    もしかすると特殊なデスクトップに表示されるのか
    ウィンドウの生成に失敗するのかでしょうか。

    実際どうなるのか解説ページを見つけることができませんでした。

  7. hkanou commented on Mar 18, 2025

    @hkanou
    Member

    タスクスケジューラ経由でマクロを実行出来ない不具合の修正パッチをお送りさせて頂きました。 #537

    • ff80d25
      ttmacto の最初の GetMessage で待ち続けないよう、WM_NULLをポストする処理の追加です。
    • e202d8c
      インストール版でタスクスケジューラ経由でマクロを実行する際、タスクの実行時に使うユーザアカウントに System、Local Service、Network Service等を指定すると、個人用設定ファイルフォルダがシステムフォルダになりフォルダ作成に失敗するため、ポータブル版のフォルダを使用するよう修正しています。

    動作確認用のバイナリの格納先は以下のとおりです。
    https://github.com/TeraTermProject/teraterm/actions/runs/13922622966 又は
    https://ci.appveyor.com/project/hkanou/teratermproject-teraterm/builds/51718115/artifacts

  8. sakuramocchi commented on Mar 19, 2025

    @sakuramocchi
    Author

    hkanouさん、バイナリ提供ありがとうございます。
    確認させていただきます。

  9. hkanou commented on Mar 22, 2025

    @hkanou
    Member

    ・e202d8c
    インストール版でタスクスケジューラ経由でマクロを実行する際、タスクの実行時に使うユーザアカウントに System、Local Service、Network Service等を指定すると、個人用設定ファイルフォルダがシステムフォルダになりフォルダ作成に失敗するため、ポータブル版のフォルダを使用するよう修正しています。

    上記の修正を行うと、ユーザの意図ではなくポータブル版のフォルダが使用される場合があります。
    また、既存の動作を変更することになるため上記 e202d8c の修正は取り下げさせて頂き、ff80d25 の修正のみ(Tera Term 4.Xと同じ動作)とさせて頂けますようお願いいたします。

  10. hkanou commented on Mar 22, 2025

    @hkanou
    Member

    e202d8c の修正は取り下げさせて頂き、ff80d25 の修正のみ(Tera Term 4.Xと同じ動作)とさせて頂けますようお願いいたします。

    PRを修正致しました。
    動作確認用のバイナリの格納先は以下のとおりです。
    https://github.com/TeraTermProject/teraterm/actions/runs/14010415197

  11. zmatsuo commented on Mar 23, 2025

    @zmatsuo
    Member

    「ユーザーがログオンしているかどうかにかかわらず実行する」とき
    ttpmacro.exeは止まっているようでした。
    「ユーザーがログオンしているときのみ実行する」ときは
    うまく動作するようです。

    手もとの環境がWindows10なので動作が異なっているかもしれません。

    調査がとても難しそうです。
    デバグ-プロセスへアタッチもできませんでした。
    なかなか厄介ですね。

    Windowsのプログラムは何らかのメッセージが来ると、
    GetMessage() からメッセージを受け取り処理を行い、
    何も起きていないときは、何も処理することがないので
    GetMessage() からリターンしてこない動作になると思います。
    このあたりで止まっているのかな?

    既存の動作を変更することになるため...

    スケジューラでSystemアカウントなどで
    Tera Term を実行したい場面があるのか、
    実行できてよいのか判断できないなと思っていました。
    ひとまず、このissueで扱うのがでは
    通常のユーザーアカウントで、
    ログオンしているかどうかにかかわらず実行できるようにする
    を扱いましょうか。

  12. 5 remaining items

  13. hkanou commented on Mar 24, 2025

    @hkanou
    Member

    aa93c26 の動作良さそうです。(Win11 24H2 で確認)
    /V、/I 無しでも動きます、また、Systemアカウントでも動きました。

  14. zmatsuo commented on Mar 25, 2025

    @zmatsuo
    Member

    Unicode API に入れ替えました。

    高DPI対応開始した4.103からですね。失礼しました。

    ttpmacroからmfc依存をなくした
    5a79728

    2,3日したらmainにマージしようと思います。

  15. added a commit that references this issue on Mar 28, 2025
  16. zmatsuo commented on Mar 28, 2025

    @zmatsuo
    Member

    マージしました。
    クローズします。

  17. added this to the 5.5.0 milestone on Apr 2, 2025
  18. added theissue type on Apr 2, 2025
  19. moved this from Todo to 未判定 in 5.4.1 リリースon Jun 1, 2025
  20. moved this from 未判定 to 含める in 5.4.1 リリースon Jul 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions