2011-10-29 22 views
2

Visual Basicで作成されたソフトウェアでは、.NET Frameworkをエンドユーザーのコンピュータにインストールして実行する必要があります。 は、ユーザーが自分のコンピュータに持っていない大規模なソフトウェアフレームワークです。 VB.NETアプリケーションを.NETフレームワークで配布して、ユーザーのマシン上で正しく実行できるようにするにはどうすればよいですか?.NET FrameworkとVB.NETアプリケーションを1つのインストーラーで一緒にインストールするexe

デプロイメント/インストーラを作成しようとすると、自動的にエンドユーザー用の.NET 4.0セットアップが含まれていると思われますが、ではなくとなります。私がこのようなMicrosoftの文書を読むと、How to: Install Prerequisites with a ClickOnce Applicationは私がすでに試したことがあり、うまくいかないものです。私は、エンドユーザーのマシンにMicrosoft .NETフォルダをインストールするあらゆる種類のインストーラを作成するか、実際の.NET実行ファイルを作成しようとしました。これらのどれも、InnoSetupのような第三者のインストール作成者でさえ、うまくいかないようです。

すべてが1つの大きなsetup.exeファイルに必要です。 1つのファイルにすべてが埋め込まれていれば(ユーザーにとって使いやすいように)、多くのスペースを取るかどうかは気にしません。

.NET Framework 4.0をパッケージ化し、VB.NETアプリケーションでインストールするにはONESetup.exeファイルにはどのようにしたらいいですか?これが不可能な場合は、.NET 4 Frameworkの実際のファイルはどこにありますか?

+0

ClickOnceデプロイされたアプリケーションは、マシンの設定を変更できません。 –

+2

あなたの心がClickOnceに設定されていない場合は、NSISをご覧ください。私は必要な場合は、ここから少しの助けを借りて、.NETを検出してダウンロード/インストールするNSISを持つインストーラを書いた... http://stackoverflow.com/questions/632587/how-to-communicate-with-net-3- 5-sp1-bootstrapper –

+0

すべてのファイルを1つの大きなセットアップファイルに入れたいですか? –

答えて

5

適切な前提条件を追加する必要があります。 How to: Install Prerequisites with a ClickOnce Application

+0

私はこれを正しく行い、別のマシンでテストするたびにソフトウェアベンダーに連絡するように指示するエラーが出ます。 .NET 4はインストールされていません。 –

1

私はInnoSetupを使用して.NETランタイムがインストールされているかどうかを判断し、そうでなければ自動的にダウンロードしてインストールしました。私は自分のウェブサイトでそのコードを見つけました。このコードはテストされていませんが、何を行う必要があるかを示す良い指標となります。

[Files] 
Source: "C:\SourceDirectory\dotNetFx40_Client_x86_x64.exe"; DestDir: "{src}"; 

上記のコードには、.NET 4.0クライアントランタイムがインストーラーの一部として含まれています。

[Code] 
function IsDotNetDetected(version: string; service: cardinal): boolean; 
// Indicates whether the specified version and service pack of the .NET Framework is installed. 
// 
// version -- Specify one of these strings for the required .NET Framework version: 
// 'v1.1.4322'  .NET Framework 1.1 
// 'v2.0.50727' .NET Framework 2.0 
// 'v3.0'   .NET Framework 3.0 
// 'v3.5'   .NET Framework 3.5 
// 'v4\Client'  .NET Framework 4.0 Client Profile 
// 'v4\Full'  .NET Framework 4.0 Full Installation 
// 
// service -- Specify any non-negative integer for the required service pack level: 
// 0    No service packs required 
// 1, 2, etc.  Service pack 1, 2, etc. required 
var 
    key: string; 
    install, serviceCount: cardinal; 
    success: boolean; 
begin 
    key := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + version; 
    // .NET 3.0 uses value InstallSuccess in subkey Setup 
    if Pos('v3.0', version) = 1 then begin 
     success := RegQueryDWordValue(HKLM, key + '\Setup', 'InstallSuccess', install); 
    end else begin 
     success := RegQueryDWordValue(HKLM, key, 'Install', install); 
    end; 
    // .NET 4.0 uses value Servicing instead of SP 
    if Pos('v4', version) = 1 then begin 
     success := success and RegQueryDWordValue(HKLM, key, 'Servicing', serviceCount); 
    end else begin 
     success := success and RegQueryDWordValue(HKLM, key, 'SP', serviceCount); 
    end; 
    result := success and (install = 1) and (serviceCount >= service); 
end; 

function InitializeSetup(): Boolean; 
var 
    ResultCode: Integer; 
begin 
    if not IsDotNetDetected('v4\Client', 0) then begin 
     Exec(ExpandConstant('{src}\dotNetFx40_Client_x86_x64.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
     result := (ResultCode == 0); 
    end else 
     result := true; 
end; 
+0

素晴らしい作品!ありがとう!! –

関連する問題