Check programmatically if SQL Server needs restarting
You can check for differences between value_in_use and value in sys.configurations for non dynamic changes.

Select * from sys.configurations
where value &lt;&gt; value_in_use and is_dynamic=0


to check for a changed logginmode

declare @tab table (name varchar(max),value varchar(max))
insert into @tab EXEC master.sys.xp_loginconfig 'login mode'
insert into @tab
SELECT 'current',CASE SERVERPROPERTY('IsIntegratedSecurityOnly')   
WHEN 1 THEN 'Windows NT Authentication'   
WHEN 0 THEN 'Mixed'   
END 

Select
CAST(
Case when (Select value from @tab where name='login mode')&lt;&gt;(Select value from @tab where name='current') 
then 1 else 0 end as bit) as loginconfig_changed