Для суммирования части из того, что было сказано наше рабочее определение того, что безопасный источник случайности, подобно нашему определению криптографически безопасного: кажется случайным, если умные люди посмотрели на него и не смогли показать, что это не абсолютно непредсказуемо.
существует никакой система для генерации случайных чисел, которые не могли очевидно быть предсказаны, так же, как нет никакого криптографического шифра, который не мог очевидно быть взломан. Надежные решения, используемые для важной работы, являются просто теми, которых, оказалось, было трудно победить до сих пор. Если кто-либо говорит Вам иначе, они продают Вам что-то.
Ум редко вознаграждается в криптографии. Пойдите с испытанными и истинными решениями.
MSDN has an article that says to use System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase
; if you need the directory, use System.IO.Path.GetDirectoryName
on that result.
Or, there's the shorter Application.ExecutablePath
which "Gets the path for the executable file that started the application, including the executable name" so that might mean it's slightly less reliable depending on how the application was launched.