Visual Studio OnlineではMicrosoft独自のTeam Foundation Version ControlかOpen Sourceのgitを選択することができますが、gitを使用する場合には追加でパスワードの設定が必要です。
右上に表示されている自分の名前をクリックして、ドロップダウンメニューから「My Profile」を選択します。表示されるダイアログから「CREDENTIALS」を選択して、「Enable alternate credentials」をクリックします。「User name (secondary)」の右側にある「Edit」、「Password」の右側にある「Change」を栗㏍すいて、gitで使用したいユーザーIDとパスワードを設定します。
この時、設定するユーザーIDとパスワードはWindows Live IDで使用しているIDやpasswordとは別のものにしてください。
gitをhttp接続で使用する場合の認証手段はベーシック認証の選択肢がありませんから、Windows Live IDを使ったシングルサインオンに対応できません。また、残念なことに標準的なgitクライアントはベーシンク認証のユーザーIDとパスワードを平文で保存するため、パスワードの漏えいリスクが高いのです。そのためVisual Studio Onlineではgitで使用するユーザーIDとパスワードはWindows Live IDのユーザーIDやパスワードとは別に設定するように作られています。
カテゴリー: Visual Studio
ASP.NET MVCの標準ユーザー認証のDBを任意の場所に変更する
ASP.NET MVCの標準ユーザー認証機能の保存先データベースはApp_DataASPNETDB.MDFになっている。これを任意のデータベースに変更するためには、Visual Studio 2010のコマンドプロンプトを開いてaspnet_regsqlを実行してDBに必要なテーブルなどを作成した後、Web.configのconnectionStringsに書かれているApplicationServicesの接続文字列を変更すれば良い。
[C#] #27. フォーム認証によるユーザーの認証
VC++ .NET 2003でUACを有効にしたアプリケーションを作成する。
VC .NET 2003以前の開発環境はマニフェストを実行ファイルに埋め込む機能が、設定画面に用意されていません。そこで手動で作成したマニフェストをリソースとして埋め込む必要があります。
まずは以下のようにマニフェストファイルを作成します。赤字の部分がUACに関する部分です。requestedExecutionLevelのlevelにrequireAdministrator(管理者権限が必要)を指定すると、実行時にUACの画面が表示されます。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Microsoft.Windows.WinSafeCleaner" type="win32" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="true"/> </requestedPrivileges> </security> </trustInfo> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
これをRT_MANIFESTという名称のカスタムリソースの、リソース番号1として実行ファイルに埋め込みます。
参考資料
マニフェスト・ファイルをアプリケーションに組み込むには?
Windows Vista以降でサービスから画面を表示する
Windows VISTA以降のWindowsではセッション0分離の機能により、サービスから直接UIを表示することができなくなりました。Microsoftの互換性情報では代替手段として「ユーザーログイン時に常駐プロセスを起動しサービスと通信を行う。」「WTSSendMessage関数を使用してメッセージボックス相当の表示を行う。」「CreateProcessAsUserを使用してログインユーザー権限でアプリケーションを起動する。」の三つの方法が提示されています。ここでは最後の「CreateProcessAsUserを使用してログインユーザー権限でアプリケーションを起動する。」サンプルを提示します。
サービスから画面を表示するにはRemote Desktop Services APIを使用します。
WTSGetActiveConsoleSessionId関数で物理コンソールのセッションIDを取得します。
WTSQueryUserToken関数で取得したセッションIDのユーザートークンを取得します。
DuplicateTokenEx関数で取得したユーザートークンを複製し、プライマリトークンを作成します。
CreateEnvironmentBlockを使用してユーザーの環境変数を取得します。
CreateProcessAsUser関数を使用して画面を表示するプロセスを起動します。
BOOL bRet(FALSE); HANDLE hUserToken(INVALID_HANDLE_VALUE); if (::WTSQueryUserToken(WTSGetActiveConsoleSessionId(), &hUserToken)) { SECURITY_ATTRIBUTES sa; memset(&sa, 0x00, sizeof(sa)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); HANDLE hDupedToken(INVALID_HANDLE_VALUE); if (::DuplicateTokenEx(hUserToken, 0, &sa, SecurityIdentification, TokenPrimary, &hDupedToken)) { PVOID lpEnvironment(NULL); if (::CreateEnvironmentBlock(&lpEnvironment, hUserToken, FALSE)) { STARTUPINFO stStartUpInfo; memset(&stStartUpInfo, 0, sizeof(STARTUPINFO)); stStartUpInfo.cb = sizeof(STARTUPINFO); stStartUpInfo.lpDesktop = _T("winsta0¥¥default"); PROCESS_INFORMATION ProcessInfo; memset(&ProcessInfo, 0, sizeof(PROCESS_INFORMATION)); ::CreateProcessAsUser(hDupedToken, _T(""), (char*)(const char*)strCmd, NULL, NULL , FALSE, CREATE_UNICODE_ENVIRONMENT, lpEnvironment, NULL, &stStartUpInfo, &ProcessInfo); } } }
Failed to create database ‘DevelopmentStorageDb20090919’
Windows Azureのアプリケーションをデバッグ実行しようとすると次のメッセージが表示される。
「Windows Azure Tools: Failed to initialize the Development Storage service. Unable to start Development Storage. Failed to start Development Storage: the SQL Server instance ‘localhostSQLExpress’ could not be found. Please configure the SQL Server instance for Development Storage using the ‘DSInit’ utility in the Windows Azure SDK.」
ローカルにインストーすしているSQLServerの接続設定で、リモート接続やWindows認証を無効にしている場合には、これを有効にしてからやり直す必要があります。また使用するSQL ServerがSQLEXPRESS以外の名称の場合にはC:\Program Files\Windows Azure SDK1.1\bin\devstore\DSInit.exeを実行して手動でAzure Data Storageの初期化をおこなう必要があります。
ですが手順に従って「DSInit.exe /SQLInstance:サービス名」としても以下のメッセージが表示される場合があります。
「Failed to create database ‘DevelopmentStorageDb20090919’ : SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 」
この場合には「DSInit.exe /SQLInstance:」とSQLInstanceオプションつきでサービス名を指定せずに実行してください。これでAzure Data Storageの初期化を行える場合があります。
どうもSQLServerのインストール後に、OSのコンピューター名などを変更している環境で、上記の問題が発生するようです。
参考:Visual Studio 2010 Problem: Windows Azure Tools: Failed to initialize the Development Storage service.
Error C2872: ‘IServiceProvider’: あいまいなシンボルです。
C++ CLRで記述したアプリケーションからCOMインターフェースを使用しようとすると「C2872: ‘IServiceProvider’: あいまいなシンボルです。」のコンパイルエラーが表示される。これは.NETのSystem.IServiceProviderとシンボルが重複しているのが原因です。
この問題を回避するには”using namespace System”よりも手前にヘッダファイルの#includeを記述します。