- PR -

.NET2.0環境でビルドしたManagedC++モジュールをCGIとして実行するとエラーが発生する

1
投稿者投稿内容
Hilda
常連さん
会議室デビュー日: 2006/02/12
投稿数: 37
投稿日時: 2007-08-21 17:30
.NET2.0環境でビルドしたManagedC++モジュール(/clr:oldSyntaxコンパイルオプションをつけたC++実行モジュール)をCGIとして
実行しようとすると、エラーが発生してしまいます。
回避方法をご存知のかたがいらっしゃいましたら、ご教授をお願いいたします。

詳細:
.NET 1.1 (VS2003)で作成したC++のCGIモジュール(.EXE)を、.NET2.0に移行するために
VS2003のプロジェクトをVS2005用のプロジェクトに変換し、ビルドしなおしたところ、
CGIとして動作しなくなってしまいました。

サンプルプログラムを確認したところ、VS2005では「/clr:oldSyntax」オプションをつけてビルドすると
CGIとして実行できませんでした。
共通言語ランタイムサポート(/clr)の設定でビルドした場合も同様の結果になりました。
"/clr"オプションをはずすと動作しました。
(VS2003では、/clrオプションを使用してもCGIとして動いていました。)

エラー内容 ------------------------
「VisualStadio Just-In-Time デバッガ」画面
が表示され、CGIの起動に失敗する。

サーバ環境 ------------------------
・IIS 5.1
.NET FrameWork 2.0
・仮想フォルダ名称を「test」
・仮想フォルダの設定
仮想ディレクトリタブ:
実行アクセス権:スクリプトおよび実行可能ファイル
アプリケーション保護:中
ASP.NETタブ:
ASP.NETバージョン:2.0.50727
ディレクトリセキュリティ - 認証方法:
匿名アクセスのユーザを、仮想フォルダにアクセス権を持つユーザに設定
------------------------

実行方法 ------------------------
※作成したEXEモジュールが"Sample.exe"だった場合
IE6を起動し、
http://localhost/test/Sample.exe
をアドレスバーに入力する

Sampleプロジェクトの設定 ------------------------
・VisualStadio2005
・C++コンソールアプリ
・共通プロパティ - 参照設定 : なし(すべて削除しました)

ソース-----------------------
※実行に成功すると、ブラウザに「OKOKOKOKOKOK」と表示されます。

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

#define __HTTP_STATUS_200__ "Status: 200 OK"

static void sendResponse( )
{
printf( "%s\n",__HTTP_STATUS_200__ );
printf( "Content-Type: text/html\n" );
printf( "%s\n","Content-Length: 12" );
printf( "\n" );
printf("%s", "OKOKOKOKOKOK");

}

static void sendResponseError( )
{
printf( "%s",__HTTP_STATUS_200__ );
printf( "\nContent-Type: text/html" );
printf( "\n%s","Content-Length: 12" );
printf( "\n" );
printf("%s", "ERrERrErrErr");

}


int _tmain(int argc, _TCHAR* argv[])
{
try
{
FILE *fp;

if ((fp = fopen("a.txt", "w+")) == NULL) {
sendResponseError();
exit(1);
}
fputs("abcdef", fp);


fclose(fp);

sendResponse( );
}
catch( ... )
{

}
return 0;
}
hit
常連さん
会議室デビュー日: 2004/04/01
投稿数: 44
投稿日時: 2009-01-15 17:11
同じ現象のように思われるのですが、
Visual Studio 2003で動作していたCGIプログラムをVisual Studio 2005でコンパイルし、実行すると、私の環境でも

ハンドルされていない例外: System.ArgumentException: パラメータが間違っています。 (HRESULT からの例外: 0x80070057 (E_INVALIDARG))

というエラーが発生し困っています。
いろいろと検索をし、調べてみましたが、ヒントになりそうな内容は、Hildaさんの投稿しかみつかりませんでした。

投稿された内容について、何か進展がありましたら教えてもらえないでしょうか?
ずいぶん、過去の投稿に対するお願いで申し訳ありませんが、よろしくお願いします。



ハル
常連さん
会議室デビュー日: 2003/02/12
投稿数: 22
投稿日時: 2009-01-15 22:27
こんにちは。

OS のバージョンが書いていないのですが、もし Windows 2003 (IIS6) であれば、以下の KB に合致しているかもしれないですね。

Error message when a CGI program that is written by using the .NET Framework 2 makes Web service calls: "System.ArgumentException: Illegal characters in path"
http://support.microsoft.com/kb/922780/en-us

HTH
Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2009-01-15 23:42
共有のためにリンクしておきます。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=4298130&SiteID=7
hit
常連さん
会議室デビュー日: 2004/04/01
投稿数: 44
投稿日時: 2009-01-16 09:13
ハルさん、ありがとうございます。

http://support.microsoft.com/kb/922780/en-us

開発環境は、WindowsXP IIS5.1ですが、KBに書かれている通り、
アプリケーションのマッピングにcgiプログラムのパスを登録すると、問題が解消できました。

1

スキルアップ/キャリアアップ(JOB@IT)