0

新しいdllがデプロイされるたびにクライアントコンピューターのgacにdllを登録する必要があるアプリケーションがあります。問題は、クライアントコンピューターでUACがオンになっているユーザーが制限されているだけであるということです。

アプリケーションは、管理者権限を持つユーザーの資格情報を知っています。

問題はprocessStartInfo.UseShellExecute = false;、UACを通過できない場合、「要求された操作には高度が必要です」というエラーが表示 processStartInfo.UseShellExecute = true;され、別のユーザーとしてすべてを実行することはできません。ユーザーとしてプロセスを開始するためにfalseに設定されたUseShellExecuteプロパティ」

        internal static void Register(String assemblyName)
    {
        ProcessStartInfo processStartInfo = new ProcessStartInfo(lcDir + "gacutil.exe", string.Format("/i {0}.dll", assemblyName));
        processStartInfo.UseShellExecute = false;
        processStartInfo.WorkingDirectory = lcDir;
        processStartInfo.UserName = lcUser;
        processStartInfo.Password = Password;
        processStartInfo.Domain = lcDomain;

        processStartInfo.Verb = "runas";

        Process process = Process.Start(processStartInfo);
        process.WaitForExit();
    }

そのようなことの「ベストプラクティス」とは何か知りたいのですが。whoeの概念がウイルスのようにウィンドウに見えることを私は知っています。

私が達成したいことは次のとおりです。

  • ユーザーは管理者権限を持つアカウントを知る必要はありません
  • 管理者ユーザーの資格情報は、プログラムのデータベースに保存されます
  • 可能な限り自動登録。
4

2 に答える 2

0

コードのこの部分を管理者として実行する必要があります。必要なのはなりすましです。

この記事を参照してください

コードプロジェクトでのAricleImpersonation

于 2012-05-15T10:31:54.950 に答える
0

セキュリティ上の理由から、このようなユーザー文字列をアプリケーションに埋め込むことは意図されていません。

設計のアイデアは、システム管理サービスなどを使用して展開し、展開を管理することです(これは面倒です)。

私は、UNIXの動作と非常によく似た、プライベートアセンブリを使用してそれを回避しました。

SQL Native Clientにクラスのサポートを追加しようとしている場合、毎回デプロイするのは困難な作業であることがわかります。

ローカル管理者の名前とパスワードがわかっている場合は、中央展開ソリューションを使用して、アプリに管理者になりすまそうとしないでください。

于 2014-07-30T16:30:27.123 に答える