TS RemoteApp としての ClickOnce オンライン専用アプリケーション
質問
ClickOnce VB.NET アプリをターミナル サービスで RemoteApp として実行できるようにするために、あらゆることを試みました。アプリの .application ファイルを実行するバッチ ファイルがあります。
これは、ターミナル サーバー上の RDP デスクトップ セッション経由で正常に動作します。. 。ただし、TS RemoteApp としては...それほど多くはありません。
クライアント システム上でコマンド プロンプト (バッチ ファイル) が一瞬表示され、その後...何もない...
(バッチ ファイルを使用せずに) .application ファイルを直接ポイントする場合や、パブリケーションをローカルにコピーしてそれをポイントする場合も同様です。
見つけました technet.microsoft.com 同様の問題についての議論がありますが、それに対する解決策はリストされていません。
以前にこの問題に遭遇して問題を解決できた人は、何をする必要がありましたか?
現在、そのサーバー上の他のすべてに RemoteApp を使用しているため、可能であればそれを使い続けたいと考えています。
現在の回避策は、OneClick 経由でネットワークに公開するたびに、ターミナル サーバー上でアプリ用の MSI ベースのインストーラーを構築して実行することですが、これは非常に面倒な場合があり、忘れがちです。
アプリはフル デスクトップ モードで実行するとターミナル サービス経由で正常に動作しますが、RemoteApp では動作しないため、ClickOnce が RemoteApp として実行しているときに利用できないものを必要とするほど、ターミナル サーバーのアクセス許可に固有のものではないと思います。
解決
これを機能させる鍵は、Windows エクスプローラー「C:\windows\explorer.exe」を使用することです。このプロセスは、フル セッションにログインするときの基本プロセスです。
Windows エクスプローラーと、ClickOnce アプリケーションの .application ファイルへのパスのコマンド ライン引数を使用するように RemoteApp を設定すると、リモート アプリケーションとして起動したときに機能します。Windows エクスプローラーは起動時に一瞬点滅しますが、消えてから ClickOnce アプリケーションが起動します。
他のヒント
なぜ ClickOnce アプリケーションでなければならないのですか?exe ファイルとアセンブリをデプロイすることだけを検討します。
私は解決策の半分しか知りませんが、アプリケーションがあまり変わらない場合は、良い解決策になる可能性があります。
あなたの問題は、ClickOnce が ClickOnce アプリケーション キャッシュと呼ばれる特別なユーザー フォルダーにデータを保存する必要があるという事実に関連していると思います。どうやら、ターミナル サービスのユーザー フォルダの設定方法が原因で、ClickOnce はターミナル サービス モードでこれにアクセスできません。
詳細については、このリンクを参照してください。
http://msdn.microsoft.com/en-us/library/267k390a(VS.80).aspx
それを行う方法はないかもしれません:(
.exe を直接起動できますか?これは、\AppData\Local\Apps\2.0[難読化されたフォルダー] のプロファイルの下に埋められていますが、見つけることができるはずです。
これにより、組み込みの更新プロセスがスキップされますが、その方法で起動できる場合は、 手動更新を行うコードを作成する アプリケーションの起動後。
今朝同じ問題に直面しましたが、clickonce アプリのディレクトリをユーザー設定フォルダーから c:\MyApp\ のような場所にコピーすることで解決しました。これが厄介であまり理想的ではないことはわかっています。でも私には十分です!
最近この問題に遭遇し、この問題に関するバグ レポートを Visual Studio 開発チームに投稿することにしました。バグレポートにお気軽にコメントしてください。これは、Server 2008 でのいくつかの変更によって引き起こされる ClickOnce のバグに違いありません。
この問題については、MSDN フォーラムでも議論されています。
アプリの起動時に RegMon と FileMon を使用してみてください。ファイルやレジストリのアクセス許可の問題を追跡できる場合があります。
また、イベント ログをチェックして、プロセスが失敗したときに何かが記録されているかどうかを確認してください。