パスの長さ制限について
いつもお世話になっております。
いつものごとくあまりWinActorに関係ない(こともない?)質問です。
現在稼働中のシナリオで、あるフォルダへのショートカットを作成する処理があります。
このショートカット作成は自作のスクリプトで実装しており、
あれやこれやした後に以下の処理を行っています。
Set shell = WScript.CreateObject("WScript.Shell")
Set shortCut = shell.CreateShortcut(scPath)
昨日このシナリオがエラーを起こしたので原因を調査してみると
Set shortCut = shell.CreateShortcut(scPath) の行で失敗していることが分かりました。
解決策を検索していると、CreateShortcutは260バイトの制限があるよ、という記事を見つけました。
https://www.google.com/search?q=createshortcut+文字数制限
エラー発生時、scPathの中身は182文字、260バイトでした。
1文字削って259バイトにすると正常終了したので、バイト数制限が問題だと判断しております。
Windowsの制限として、パス長の制限を解除していない限りは260文字の制限があるというのは知っていたのですが
上記の260バイト制限は知りませんでした。
https://learn.microsoft.com/ja-jp/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
<追記>
ここでいう260文字は半角・全角問わずだそうです。
https://www.attend.jp/innerstaff_181113
<追記終わり>
ここで本題ですが、この260バイトの制限というのはCreateShortcutメソッドが持つ制限なのか、WScriptが持つ制限なのか
それとも他の要因によるものなのか、仕様をご存じであれば教えていただけないでしょうか。
いくつかのライブラリでWscript.shellを呼び出している処理は見かけるので、場合によってはそれらのライブラリを使用する際も文字数/バイト数を気にしないといけなくなることを懸念しています。
(ちなみに管理者権限が無いため、パス長の制限解除はできません。(HKEY_LOCAL_MACHINEに値を書き込めない))