備忘録

備忘録

PowerShell スクリプトを実行する方法

Ⅰ. はじめに

タイトルの通り「PowerShell スクリプトを実行する方法」です。

セキュリティ上、デフォルト設定ではPowerShell スクリプトを実行する事が出来ません。
以下のエラーが出力されます。

PS C:\> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\test.ps1 を読み込
むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照
してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Ⅱ. やり方

1. 以下のコマンドを実行する
Set-ExecutionPolicy Bypass -Scope CurrentUser

FAQ

Q. ps1 ファイルをダブルクリックで実行したい

A. 以下のテキストをx.regという名前をつけて保存し、実行する。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\shell\open\command]
@="\"C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe\" \"%1\""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

Visual Studio 2019で Windows SDK 8.1 を利用する方法

Ⅰ. はじめに

タイトルの通り「Visual Studio 2019で Windows SDK 8.1 を利用する方法」です。

Visual Studio 2019 から Visual Studio Installer を利用して Windows SDK 8.1 をインストールする事ができなくなりました。
この記事では Windows SDK 8.1 を直接ダウンロードし、利用する方法を紹介します。

Ⅱ. やり方

2. Windows 8.1 SDK をダウンロードする

※2021/01/22追記
「INSTALL SDK」をクリックしてもダウンロードが自動開始されないバグ(?)があるようです。
リンクアドレスをコピーして手動でURLに移動することで回避できます。

f:id:kagasu:20190508223334p:plain

3. sdksetup.exe を起動しインストールする

WindowsでDarknetとYOLOv3を使う方法

Ⅰ. はじめに

タイトルの通り「WindowsでDarknetとYOLOv3を使う方法」です。

Ⅱ. やり方

1. Visual StudioC++の開発環境を整える

f:id:kagasu:20190508193924p:plain

2. Visual Studio 2015 (v140) 用のC++ビルドツールをインストールする


3. 英語をインストールする

vcpkg に「英語」が必要です

4. CUDAをインストールする

最新版をインストールする
https://developer.nvidia.com/cuda-downloads

5. cuDNN をダウンロードする

最新版をインストールする
NVIDIAのアカウントが必要です
https://developer.nvidia.com/rdp/cudnn-download

6. cuDNN をコピーする
copy cudnn\cuda\bin\cudnn64_7.dll "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\cudnn64_7.dll"
copy cudnn\cuda\include\cudnn.h "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include\cudnn.h"
copy cudnn\cuda\lib\x64\cudnn.lib "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64\cudnn.lib"
7. CMake をインストールする

https://cmake.org/

8. vcpkg をインストールする

https://kagasu.hatenablog.com/entry/2019/02/20/162907

9. Pthreads と OpenCV をインストールする

ビルド完了まで約1時間かかります(i7 8700Kの場合)

vcpkg install pthreads:x64-windows opencv[cuda]:x64-windows
10. Pathに以下ディレクトリを追加する
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
C:\Program Files\CMake\bin
11. 環境変数を追加する
環境変数 変数値
VCPKG_ROOT C:\vcpkg
VCPKG_DEFAULT_TRIPLET x64-windows
CUDA_TOOLKIT_ROOT_DIR C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
12. Darknet を clone する
git clone https://github.com/AlexeyAB/darknet
13. ビルドする
powershell build.ps1
14. YOLOv3 モデルをダウンロードする

https://pjreddie.com/media/files/yolov3.weights

15. 実行する
cd build_win_release/Release
darknet.exe detector test ../../cfg/coco.data ../../cfg/yolov3.cfg yolov3.weights -ext_output data/dog.jpg

実行結果

f:id:kagasu:20190508222033p:plain

WPFにマテリアルデザインを適応する方法

Ⅰ. はじめに

タイトルの通り「WPFマテリアルデザインを適応する方法」です。

Ⅱ. やり方

1. 必要なパッケージをインストールする
Install-Package MaterialDesignThemes
Install-Package MaterialDesignThemes.MahApps
2. App.xaml を変更する
<Application.Resources>
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <!-- MahApps -->
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />

      <!-- Material Design -->
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />

      <!-- Material Design: MahApps Compatibility -->
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Fonts.xaml" />
      <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.MahApps;component/Themes/MaterialDesignTheme.MahApps.Flyout.xaml" />
    </ResourceDictionary.MergedDictionaries>

    <!-- MahApps Brushes -->
    <SolidColorBrush x:Key="HighlightBrush" Color="{DynamicResource Primary700}"/>
    <SolidColorBrush x:Key="AccentBaseColorBrush" Color="{DynamicResource Primary600}" />
    <SolidColorBrush x:Key="AccentColorBrush" Color="{DynamicResource Primary500}"/>
    <SolidColorBrush x:Key="AccentColorBrush2" Color="{DynamicResource Primary400}"/>
    <SolidColorBrush x:Key="AccentColorBrush3" Color="{DynamicResource Primary300}"/>
    <SolidColorBrush x:Key="AccentColorBrush4" Color="{DynamicResource Primary200}"/>
    <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{DynamicResource Primary700}"/>
    <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="{DynamicResource Primary500Foreground}"/>
    <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5">
      <GradientStop Color="{DynamicResource Primary700}" Offset="0"/>
      <GradientStop Color="{DynamicResource Primary300}" Offset="1"/>
    </LinearGradientBrush>
    <SolidColorBrush x:Key="CheckmarkFill" Color="{DynamicResource Primary500}"/>
    <SolidColorBrush x:Key="RightArrowFill" Color="{DynamicResource Primary500}"/>
    <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{DynamicResource Primary500Foreground}"/>
    <SolidColorBrush x:Key="IdealForegroundDisabledBrush" Color="{DynamicResource Primary500}" Opacity="0.4"/>
    <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchBrush.Win10" Color="{DynamicResource Primary500}" />
    <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.OnSwitchMouseOverBrush.Win10" Color="{DynamicResource Primary400}" />
    <SolidColorBrush x:Key="MahApps.Metro.Brushes.ToggleSwitchButton.ThumbIndicatorCheckedBrush.Win10" Color="{DynamicResource Primary500Foreground}" />
  </ResourceDictionary>
</Application.Resources>
3. MainWindow.xaml を変更する
<metro:MetroWindow
  ...
  xmlns:metro="http://metro.mahapps.com/winfx/xaml/controls"
  GlowBrush="{DynamicResource AccentColorBrush}"
  BorderThickness="1"
  Title="MainWindow" Height="200" Width="300">
  <Grid>
    <Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/>
  </Grid>
</metro:MetroWindow>
4. MainWindow.xaml.cs を変更する
public partial class MainWindow : MetroWindow
{
  public MainWindow()
  {
    InitializeComponent();
  }
}

実行結果

f:id:kagasu:20190508144634p:plain

.NET Coreで実行ファイル1つだけを出力する方法

2024/01/22 追記

FDDは未知の原因不明なエラーが発生する場合があります。
何か特別な理由が無い限りはSCDを推奨します。

Ⅰ. はじめに

タイトルの通り「.NET Coreで実行ファイル1つだけを出力する方法」です。

FDDはFramework-dependent deploymentsの事です。
SCDはSelf-contained deploymentsの事です。

Ⅱ. 環境

  • .NET Core 3.0以上必須

※.NET 5以上についてはこの記事で触れません

Ⅲ. やり方1(csprojを変更しない場合)

FDDの場合

dotnet publish -c Release -r win-x64 --self-contained false /p:PublishSingleFile=true

SCDの場合

dotnet publish -c Release -r win-x64 --self-contained true /p:PublishSingleFile=true

Ⅳ. やり方2(csprojを変更する場合)

FDDの場合

1. csprojを変更する
<PropertyGroup>
  <PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
2. ビルドする
dotnet publish -c Release -r win-x64 --self-contained false

SCDの場合

1. csprojを変更する
<PropertyGroup>
  <PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
2. ビルドする
dotnet publish -c Release -r win-x64 --self-contained true

その他

Q. ファイルサイズを小さくしたい

A. PublishTrimmed オプションを付けると不要なDLLを除くことが出来ます。
つまり、ファイルサイズが小さくなります。
※SCDでのみ有効です。※2019/07/05時点
※.NET Core 3.0 preview 6以上必須

dotnet publish -r <rid> /p:PublishTrimmed=true /p:PublishSingleFile=true

Q. 起動速度を高速化したい

A. PublishReadyToRun オプションを付けると「起動速度だけ」高速化出来ます。
PublishTrimmedと併用可能です。
※SCDでのみ有効です。※2019/07/05時点
※.NET Core 3.0 preview 6以上必須

dotnet publish -r <rid> /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishSingleFile=true