ターミナルサービス環境で Windows API の GetWindowsDirectory 関数が正しく動作しない
ターミナルサービス環境で PowerBuilder アプリケーションを利用する場合に Windows API の GetWindowsDirectory 関数が正しく動作しない事象が報告されています。
Bug ID | 3637 | ||||||
---|---|---|---|---|---|---|---|
Product | PowerBuilder EN/JP | ||||||
ステータス | Appeon にて検証中 | ||||||
発生バージョン | EN | 12.6以前 | 2017 | 2017 R2 | 2017 R3 | 2019 | 2019 R2 |
JP | 12.6以前 | - | 2017 R2 | 2017 R3 | - | - |
※ :発生バージョン :解決済み、未発生 :未確認
詳細
ターミナルサーバー環境上の PowerBuilder アプリケーションで Windows API の GetWindowsDirectory 関数を呼び出すと、ユーザーごとの Windows ディレクトリ (“C:\Users\<user name>\Windows”) ではなく、システムの Windows ディレクトリ (“C:\Windows”) が返されます。
ターミナルサーバー対応でないアプリケーション (レガシーアプリケーションとも呼ばれます) は、マルチユーザー環境で正常に動作するように、レガシーアプリケーションに対して特定の変更を行います。 たとえば、ターミナルサーバーは、Windows の Windows ディレクトリを取得するのではなく、各ユーザーが Windows フォルダーを取得するように、仮想 Windows フォルダーを作成します。 これにより、ユーザーは独自の INI ファイルにアクセスできるようになります。
Windows またはコンソールアプリケーションには /TSAWARE オプションが存在し、このオプションが “有効” な場合はターミナル サーバーは、アプリケーションに特定の変更を加えることができません。
PowerBuilder 12.5 以前で開発されたアプリケーションでは、/TSAWARE フラグが取り除かれていましたが、PowerBuilder 12.6 以降、/TSAWARE フラグが追加されデフォルトで “有効” となっているため、変更を加えることができなくなっています。
回避策
- TSAWARE フラグを取り除く。
-
作成済みのアプリケーションに対して TSAWARE フラグを変更するためには Microsoft Visual Studio のツールである “editbin” を使用します。
下記のように /TSAWARE:NO を付与することにより、アプリケーションから呼び出される GetWindowsDirectory 関数でユーザーごとの Windows フォルダーを取得できるようになります。
-
作成済みのアプリケーションに対して TSAWARE フラグを変更するためには Microsoft Visual Studio のツールである “editbin” を使用します。
【例】
editbin /TSAWARE:NO <filename>.exe