喫茶XRAYトップページ

[スレッド全体
]

[11550] Re2:PowerShellの記事の更新返信 削除
2017/11/14 (火) 12:11:42 Mr.XRAY
> [ 09_PowerShell コマンドの実行結果をリダイレクト ]
> http://mrxray.on.coocan.jp/Delphi/Others/PowerShellDelphi.htm#09


巷にあるスクリプトのコードを TMemo に貼り付けて実行可能なサンプル追加しました.
ボタンの下の TEdit のファイルに保存してから実行するので,
引数付きのスクリプトも実行可能です.


[11553] Re3:PowerShellの記事の更新返信 削除
2017/11/14 (火) 18:00:47 Mr.XRAY
> 巷にあるスクリプトのコードを TMemo に貼り付けて実行可能なサンプル追加しました.

自動貼付けにしていたのですが,
非常に使いづらいので,自動貼付けは止めました (苦笑)


[11562] スクリプトのテスト用プログラム返信 削除
2017/11/17 (金) 14:58:16 Mr.XRAY
あまりにも情けない仕様なので,少しばかり手直ししました.

[15_PowerShell スクリプトのテスト用プログラム]
http://mrxray.on.coocan.jp/Delphi/Others/PowerShellDelphi.htm#15


[11566] Re:スクリプトのテスト用プログラム返信 削除
2017/11/18 (土) 15:02:34 Nov
▼ Mr.XRAYさん
> [15_PowerShell スクリプトのテスト用プログラム]
> http://mrxray.on.coocan.jp/Delphi/Others/PowerShellDelphi.htm#15


そういえば、バッチファイルで実行する方法もいろいろあるようです。
(セキュリティ上よろしくないとは思いますが...)

最近、.netバージョンを簡単に調べる方法を探していて、
[インストールされている全ての .NET Framework のバージョンを列挙する]
https://qiita.com/asterisk9101/items/f13da78b4cb9ab6d3c4b
[バッチファイルにPowerShellスクリプトを埋め込む]
https://pf-j.sakura.ne.jp/program/tips/ps1bat.htm
を参考に(99.99%コピペ)以下のようにしてしてみました。
MSさんが、もちょっと便利な方法を用意していてくれれば、
こんなグレーゾーンを渡らなくても済むのですが。

@(echo '> NUL
echo off)
setlocal enableextensions
set "THIS_PATH=%~f0"
set "PARAM_1=%~1"
PowerShell.exe -Command "iex -Command ((gc \"%THIS_PATH:`=``%\") -join \"`n\")"
exit /b %errorlevel%
-- この1つ上の行までバッチファイル
') | sv -Name TempVar

# ここからPowerShellスクリプト
ls -r "HKLM:\software\microsoft\net framework setup\ndp" | % {
    $_.GetValue("Version") | ? { $_ } | % {
        New-Object PSObject |
            Add-Member NoteProperty -PassThru -Name "Type" -Value "Version" |
            Add-Member NoteProperty -PassThru -Name "Value" -Value $_
    }
    $_.GetValue("Release") | ? { $_ } | % {
        switch ($_) {
            "378389" { $r = "4.5" }
            "378675" { $r = "4.5.1 installed with Windows 8.1 or Windows Server 2012 R2" }
            "378758" { $r = "4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2" }
            "379893" { $r = "4.5.2" }
            "393295" { $r = "4.6 installed on Windows 10" }
            "393297" { $r = "4.6" }
            "394254" { $r = "4.6.1 installed on Windows 10 Novermber Update" }
            "394271" { $r = "4.6.1" }
            "394802" { $r = "4.6.2 installed on Windows 10 Anniversary Update" }
            "394806" { $r = "4.6.2" }
            "460798" { $r = "4.7 installed on Windows 10 Creators Update" }
            "460805" { $r = "4.7"}
            default { $r = "Unknown: $_" }
        }
        New-Object PSObject |
            Add-Member NoteProperty -PassThru -Name "Type" -Value "Release" |
            Add-Member NoteProperty -PassThru -Name "Value" -Value $r
    }
} | Sort -Unique -Property Value
Read-Host "続けるには Enter キーを押してください"

[11567] Re2:スクリプトのテスト用プログラム返信 削除
2017/11/18 (土) 17:55:49 Mr.XRAY
▼ Novさん

> そういえば、バッチファイルで実行する方法もいろいろあるようです。
> (セキュリティ上よろしくないとは思いますが...)


記事を書くときにいろいろなサイトの記事を見ましたが,
皆さん本当にいろいろやっていますね.
スゴイです.

> MSさんが、もちょっと便利な方法を用意していてくれれば、
> こんなグレーゾーンを渡らなくても済むのですが。


ハハハッ.No コメント (笑)

PowerShell のスクリプトの部分だけやってみました.


[11568] インストール済み.NET Framework返信 削除
2017/11/18 (土) 18:24:37 Mr.XRAY
インストール済みの .NET Framework のバージョンは
WMI の Win32_Product クラスでも取得できますが,非常に時間がかかります.

実用的かどうかは,貴方次第っと (^^;


[11569] Re:インストール済み.NET Framework返信 削除
2017/11/19 (日) 00:00:53 Mr.XRAY
> インストール済みの .NET Framework のバージョンは

ものはついでですので,Windows API を使用したコードです.
JEDI の Windows API のユニットを使用しています.

うまくいったと思ったら,検出できないバージョンがあります.
WMI を使用したのも,このサンプルも MSI でインストールしたアプリです.
そのあたりが誓うのかも...
WMI とこのサンプルの動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.


implementation

uses
  JwaMsi,
  StrUtils;

{$R *.dfm}

//-----------------------------------------------------------------------------
//  MSIでインストールしたアプリのプロパティの取得
//  AProduct  : インストールしたアプリのプロダクト名(GUID)
//  AProperty : 取得したいプロパティの識別子
//              識別子の名前はMSDNのMsiGetProductInfo関数の説明を参照
//-----------------------------------------------------------------------------
function GetMsiPropertyValueStr(AProduct: PChar; AProperty: PChar): string;
var
  LValue : PChar;
  LLen   : DWORD;
begin
  //取得に必要なバッファサイズを取得(第3引数をnilにする)
  LLen := 0;
  MsiGetProductInfo(AProduct, AProperty, nil, @LLen);

  //取得したバッファサイズにnul終端文字分が含まれないとのことなで追加
  LLen   := LLen + 1;
  LValue := StrAlloc(LLen);
  try
    MsiGetProductInfo(AProduct, AProperty, LValue, @LLen);
    Result := LValue;
  finally
    StrDispose(LValue);
  end;
end;

//=============================================================================
//  MSIでインストールしたアプリをリスト
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LIndex   : Integer;
  LProduct : PChar;
  LText    : string;
begin
  Memo1.Lines.Clear;
  Memo1.Lines.BeginUpdate;
 
  LIndex := 0;
  LProduct := StrAlloc(MAX_PATH);
  try
    while MsiEnumProducts(LIndex, LProduct) = ERROR_SUCCESS do begin
      LText := GetMsiPropertyValueStr(LProduct, INSTALLPROPERTY_PRODUCTNAME);

      if StrUtils.ContainsText(LText, 'NET Framework') then begin
        Memo1.Lines.Add(string(LProduct));
        Memo1.Lines.Add(IntToStr(LIndex) + '    '+ LText);

        LText := GetMsiPropertyValueStr(LProduct, INSTALLPROPERTY_VERSIONSTRING);
        Memo1.Lines.Add(IntToStr(LIndex) + '    '+ LText);
        Memo1.Lines.Add('');
      end;

      inc(LIndex);
    end;
  finally
    StrDispose(LProduct);
  end;

  Memo1.Lines.EndUpdate;
end;



[11570] Re2:インストール済み.NET Framework返信 削除
2017/11/19 (日) 13:48:01 Nov
▼ Mr.XRAYさん
> うまくいったと思ったら,検出できないバージョンがあります.

OSプレインストールバージョンは列挙できない気がします。
だとしたら、OSバージョンさえ押さえておけば、この方法で充分ですね。

[11578] Re3:インストール済み.NET Framework返信 削除
2017/11/20 (月) 21:42:34 Mr.XRAY
▼ Novさん

> OSプレインストールバージョンは列挙できない気がします。
> だとしたら、OSバージョンさえ押さえておけば、この方法で充分ですね。


結局 Nov さんが掲載したように,レジストリから情報を取得しないと
ダメなようですね.
ということで記事を追加しておきました.

[ インストールされている .NET Framework のバージョン]
http://mrxray.on.coocan.jp/Delphi/Others/dotNETFrameworkDelphi.htm#03


[11579] Re4:インストール済み.NET Framework返信 削除
2017/11/21 (火) 18:33:20 Mr.XRAY
> [ インストールされている .NET Framework のバージョン]
> http://mrxray.on.coocan.jp/Delphi/Others/dotNETFrameworkDelphi.htm#03


あまり気が乗らなかったのですが,気になるので Delphi のコード追加しました.


[11581] Re5:インストール済み.NET Framework返信 削除
2017/11/22 (水) 19:56:11 Mr.XRAY
> > [ インストールされている .NET Framework のバージョン]
> > http://mrxray.on.coocan.jp/Delphi/Others/dotNETFrameworkDelphi.htm#03


(1) v1.1 の検出コードを追加
(2) v4.x の SP が取得できないコードだったので修正
(3) バージョン順に表示するよにした
(4) v4.x の依存関係を表示するようにした


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82